
Ich habe einen Ordner Accounts
mit E-Mail-Konten, alle diese Ordner haben einen Ordner Archive.folder
. Ich möchte alle Archivordner mit einem einfachen Skript in einen neuen Ordner verschieben.
Ich habe bisher Folgendes versucht:
find . -mindepth 1 -maxdepth 1 ! -name archive -exec mv -t testnew/ {} +
Aber es verschiebt alle Ordner, nicht nur die mit dem Namen „Archiv“. Ich möchte alle Ordner im aktuellen Ordner mit dem Namen „Archiv“ finden und sie in den Ordner „testnew/“ verschieben. Der Pfad zum verschobenen Ordner sollte derselbe sein wie zuvor.
Ausgangssituation:
Accounts
- 1
- archive
- inbox
- folder2
- 2
- archive
- inbox
- folder2
- 3
- archive
- inbox
- folder2
So sollte es aussehen:
testnew
- 1
- archive
- 2
- archive
- 3
- archive
Antwort1
Wenn es in Ordnung ist, dies interaktiv zu tun, vidir
könnte das ein guter Weg sein. Siehediese Antwort.
In Ihrem Fall sieht die Vorgehensweise folgendermaßen aus:
cd /path/to/Accounts find . -type d -name archive | vidir -
vidir
wird ein Texteditor gestartet. Verwenden Sie "Suchen und Ersetzen" und ersetzen Sie jede führende Zeile./
durch den gewünschten Pfad, sodass die Zeilen Ihrer gewünschten Verzeichnisstruktur entsprechen. Pfade können absolut oder relativ sein und enthalten../
. Sie können dies beispielsweise ganz einfach ändern./1/archive ./2/archive ./3/archive
das mögen
../testnew/1/archive ../testnew/2/archive ../testnew/3/archive
Speichern Sie die bearbeitete Datei und beenden Sie den Editor.
Anmerkungen:
- Wenn Ihre Verzeichnisstruktur Verzeichnisse enthält, deren Namen mit enden
.
(sodass./
Teilzeichenfolgen nicht nur am Anfang erscheinen), ist es besser, sie<TAB>./
durch zu ersetzen<TAB>whatever/path/you/want/
, wobei<TAB>
das Tabulatorzeichen angibt. Es hängt vom Editor ab, ob/wie Sie dieses Zeichen in „Suchen und Ersetzen“ einbeziehen können. - Wählen Sie Ihren Editor durch Angabe von aus
EDITOR
, zBfind … | EDITOR=kate vidir -
. vidir
kann keine Dateien zwischen Dateisystemen verschieben. Wenn allearchive
Verzeichnisse zu einem Dateisystem gehören und Sietestnew
in einem anderen Dateisystem sein möchten, erstellen Sietestnew
im Quelldateisystem, verwenden Sievidir
und verschieben Sie anschließendtestnew
in das Zieldateisystem.- Am Ende vondies ist eine andere AntwortEs gibt einen experimentellen Ansatz, der (missbraucht) wird,
EDITOR
umvidir
nicht interaktiv zu machen.Ich findevidir
es in Fällen wie Ihrem vor allem deshalb nützlich, weil ich so sicherstellen kann, dass die resultierenden Pfade wirklich meinen Wünschen entsprechen, bevor ich sie umbenenne oder verschiebe. Wenn ich etwas vermassle, kann ich abbrechen, ohne die Änderungen zu speichern.Wenn Sie eine nicht interaktive Lösung für Ihr Problem wünschen,vidir
ist dies nicht das beste Tool.