Ich gehe davon aus, dass Sie GNU haben find
. Wenn Sie Dateien oder Verzeichnisse verschieben möchten, die innerhalb eines bestimmten Zeitraums geändert wurden (z. B. März 2014), gehen Sie folgendermaßen vor:
find . -maxdepth 1 \ -newermt 2014-02-28 -not -newermt 2014-04-01 \ -not -name 'build_tools' \ -exec mv {} build_tools \+
Erläuterung:
- In diesem Verzeichnis finden, ohne Unterverzeichnisse
- Dateien im Bereich zwischen 28. Februar und 1. April, wobei
mt
sich die Änderungszeit bezieht. Sie können auchct
nach der Erstellungszeit suchen. - das heißt nicht
build_tools
- verschiebe sie alle nach
build_tools
. Das\+
bedeutet, dass alle gefundenen Datei- / Verzeichnisnamen ersetzt werden{}
, und nicht einer nach dem anderen. Wenn Sie eine nach der anderen möchten, müssen Sie\;
stattdessen eine.
Einige Sachen:
Analysieren Sie nicht die Ausgabe von
ls
. Das Format ist vom Betriebssystem abhängig. Die Auswahl von Spalten mitawk
Fehlern schlägt fehl, wenn die Datei- / Verzeichnisnamen Leerzeichen enthalten.Sie haben früher
&
Befehle verkettet, setzen jedoch&
nur einen Prozess in den Hintergrund. Wenn überhaupt, hätten Sie verwenden sollen&&
, aber alles in allem wäre es ziemlich kompliziert, das zu erreichen, was Sie wollen.