
Mein Verzeichnisbaum sieht wie folgt aus -
/media/blueray/Data/Test$ tree
.
├── What????
│ └── What????
└── What????.txt
Wenn ich den Befehl ausführefind . -depth | rename 's/[?<>\\:*|\"]//g'
Es sagt -
Can't rename ./What????/What???? ./What/What: No such file or directory
Nach dem Ausführen des Befehls wird die Verzeichnisstruktur jedoch zu -
/media/blueray/Data/Test$ tree
.
├── What
│ └── What????
└── What.txt
Mir scheint, dass er find
von der Spitze des Baums aus mit der Suche beginnt und deshalb den Überblick über den Baum verliert.
Was ist hier die Lösung?
Antwort1
Das Problem wird nicht durch verursacht find
, sondern durch rename
: Es verarbeitet den vollständigen Pfad und versucht daher, ./What????/What????
in umzubenennen ./What/What
, was fehlschlägt, da das What
Verzeichnis (noch) nicht existiert.
Wenn Sie rename
mit nur die Verarbeitung von Dateinamen durchführen, -d
wird das folgende Problem behoben:
find . -depth | rename -d 's/[?<>\\:*|\"]//g'
Wenn Ihre Version von rename
die Option nicht unterstützt -d
(eingeführt mit Version 1.10 von File::Rename
, vorausgesetzt, Sie rename
verwenden die Perl-Version), können Sie find
die Dateinamen nur übergeben, indem Sie rename
in jedem Verzeichnis Folgendes ausführen:
find . -depth -execdir rename 's/[?<>\\:*|\"]//g' {} +
(Dank anFreddyfürdie Lösung.)