Hier ist eine Version, die ls
nicht verwendet. Es sollte weniger anfällig für seltsame Zeichen in Dateinamen:
find . -maxdepth 1 -type f -name '*.html' -print0
\| xargs -0 stat --printf "%Y\t%n\n"
\| sort -n
\| tail -n 10
\| cut -f 2
\| xargs cp -t ../Test/
I verwendet find
für ein paar Gründe:
1), wenn es zu viele Dateien in einem Verzeichnis sind, sträuben bash wird am Wildcard Erweiterung*.
2) Mit dem -print0
Argument zu find
wird das Problem der Bash erweitern Whitespace in einem Dateinamen in mehrere Token.
* Tatsächlich teilt bash einen Speicherpuffer für seine Wildcard-Erweiterung und seine Umgebungsvariablen, also ist es nicht streng eine Funktion der Anzahl der Dateinamen, sondern die Gesamtlänge der Dateinamen und Umgebungsvariablen. Zu viele Umgebungsvariablen => keine Wildcard-Erweiterung.
BEARBEITEN: Incorporated einige Verbesserungen von @ Glennjackman. Die ursprüngliche Verwendung von find
wurde beibehalten, um die Verwendung der Platzhaltererweiterung zu vermeiden, die in einem großen Verzeichnis fehlschlagen könnte.
Sie könnten 'xargs' verwenden und' awk' + 'sh' vermeiden (fühlt sich hässlich an) oder wahrscheinlich' find ... -exec' verwenden und nur einen Befehl ausführen. – KurzedMetal
Ich könnte den Fund machen, aber ich habe mich nur gefragt, wie man das Gleiche mit awk macht! – ThinkCode
Siehe [BashFAQ/003] (http://mywiki.wooledge.org/BashFAQ/003) und [BashFAQ/099] (http://mywiki.wooledge.org/BashFAQ/099). –