Ich habe hier viele Fragen und Antworten mit einer Konstruktion nach dem Vorbild von gesehen
list_dir=`ls -t /path/to/dir/`
for i in $list_dir; do
oder
ls -t | while read i; do
Jetzt weiß ich, dass Sie ls nicht in Skripten verwenden sollten, da es leicht kaputt geht. Ich kann jedoch keinen besseren Weg finden, um Dateien in der Reihenfolge von zuletzt geändert zu zuletzt geändert (oder umgekehrt) zu bearbeiten.
Ich kann so etwas verwenden wie:
find . -type f -printf '%T@ %p\n' | sort -n | cut -d ' ' -f 2- | while read i; do...
... aber dies wird immer noch mit allen Dateien brechen, deren Namen Zeilenumbrüche enthalten, und es ist viel hässlicher zu booten. Gibt es einen besseren Weg?
--zero-terminated
- danke dafür, ich wünschte ich könnte dir noch mehr Punkte geben!info ls
: Wenn ich ein kugelsicheres Skript mit ls wollte, welches--quoting-style
sollte ich verwenden?--quoting-style=escape
ist der Weg zu wählen.ls
--quoting-style
fehlschlägt (zum Parsen), weil es nur Dateinamen zitiert: wenn Sie ein Leerzeichen in einem Gruppennamen haben. Ok, es ist ein sehr seltsamer Fall, aber er erscheint in der Cygwin-Bash-Shell. Hier haben Sie Gruppennamen wieDomain Users
.Der mit Abstand einfachste Weg ist die Verwendung von zsh. Das Glob-Qualifikationsmerkmal
om
sortiert Übereinstimmungen in umgekehrter chronologischer Reihenfolge. VerwendungOm
für die chronologische Reihenfolge.Das
N
Glob-Qualifikationsmerkmal bewirkt, dass das Muster zu einer leeren Liste erweitert wird, wenn das Verzeichnis leer ist. Stellen Sie dies so ein*(DNom)
, dass es mit Punktdateien übereinstimmt.quelle