
Ich habe einen Ordner Alle mit
AllFolders
F1
some_file_20170315_xyz.txt
some_file_20170314_xyz.txt
....
F2
some_other_file_20170315_abc.txt
some_other_file_20170314_abc.txt
...
...
Fn
Wie kann ich alle Dateien mit einem bestimmten Datum in einen anderen leeren Ordner kopieren, sodass die Ordnerstruktur ebenfalls kopiert wird und so aussieht:
Folder_20170315
F1
some_file_20170315_xyz.txt
F2
some_other_file_20170315_abc.txt
Antwort1
Eine Möglichkeit besteht darin, find
und zu verwenden cp
:
find . -iname '*20170315*' -exec cp --parents {} /tmp/Folder_20170315 \;
Der Zielordner muss bereits vorhanden sein. Wenn Sie möchten, können Sie seine Erstellung auch per Skript durchführen.
Es sieht so aus, als ob Sie den Dateinamen überprüfen möchten, es find
lässt sich aber auch das Dateidatum überprüfen.
Antwort2
Da cp --parents
es auf dem Mac nicht verfügbar ist, habe ich zwei Befehle verwendet, um ein ähnliches Problem zu lösen:
find . -name '*.example' | xargs -I FOO dirname FOO | xargs -I FOO mkdir -p /new/root/directory/FOO
find . -name '*.example' | xargs -I FOO cp FOO /new/root/directory/FOO
Der erste Befehl erstellt den Verzeichnisbaum. Der zweite kopiert die Dateien.
Dies setzt voraus, dass es find
schnell ist. Wenn find
es einen Leistungsengpass gibt, müssen Sie weiter optimieren. Sie könnten beispielsweise die Operationen in eine Funktion verschieben.