Ich möchte so etwas tun, um die letzten beiden heruntergeladenen Dateien zu verschieben:
mv ` ls -rt ~/Downloads/ | tail -2 ` .
Gibt leider ls
nur die Dateinamen an. Wie kann ich den obigen Code anpassen?
(Bevor jemand darauf hinweist, bin ich mir der Probleme beim Weiterleiten der Ausgabe von bewusst ls
. Ich würde dies nur verwenden, wenn ich die fraglichen Dateinamen kenne.)
find
stattdessen.Antworten:
Okay, wenn Sie nicht aufgeben wollen
ls
, versuchen Sie zumindest, sich von der Gewohnheit zu lösen, Backticks für alles zu verwenden, insbesondere wenn diesxargs
besser passt:quelle
xargs
gefällt mir mehr als die Backticks. Aber gibt es einen technischen Grund, diese Pfeifenfolgexargs
der Verwendung von Backticks vorzuziehen, oder ist dies nur eine Frage des Geschmacks?ls
xargs -0
ls
wird nicht empfohlenSie können GNU
find
dort verwenden:Die
find -printf
Optionen:%Ts
um die Zeit als Epoche anzuzeigen%p
der DateipfadSehen
man find | less +/'^ *-printf'
bearbeiten
Wenn Sie Leerzeichen in Dateinamen verwenden müssen, empfehle ich diese andere Lösung:
quelle
find -printf
Optionen-f2-
anstatt-f2
als Option zu verwendencut
? Wofür ist der zweite Strich?man cut
druckt , wie gesagt , bis zum Ende, wenn es mehr als eine Spalte gibt.Verwenden Sie
ls -rt ~/Downloads/*
anstelle vonls -rt ~/Downloads/
. Imls -rt ~/Downloads/*
Argument wird die Zeichenfolge zuerst von der Shell erweitert (dies wird als Dateiname Globbing bezeichnet ). Sie erhalten also eine Liste von Pfaden als Argumente für denls -rt
Befehl, die dann so sortiert werden, wie Sie es mit den Optionen von angegeben habenls
. Im Gegensatz dazuls -rt ~/Downloads/
liest der Befehl den Inhalt des Verzeichnisses~/Downloads/
. Dies ist eine Liste von Dateien ohne Verzeichnispfad.quelle
Mit zsh:
Der
(...)
Teil wird als Globbing-Qualifikation bezeichnet , eine der Killer-Eigenschaften vonzsh
. Jedes Qualifikationsmerkmal (normalerweise einzelne Zeichen) ermöglicht es, die übereinstimmenden Einträge basierend auf den Attributen der Dateien (Typ, Größe, Zeit ...) zu filtern, die Reihenfolge zu ändern, in der sie erweitert werden, oder zu ändern, wie sie erweitert werden.Oben haben wir:
.
(Punkt): Nur reguläre Dateien auswählen (keine Verzeichnisse, Symlinks ...)om
: O rder die Liste von m NDERUNG Zeit.[1,2]
: Wählen Sie nur die ersten beiden Einträge aus.Beachten Sie auch, dass der Befehl fehlschlägt, wenn keine Übereinstimmung vorliegt (wo andere Shells versehentlich die falsche Datei / das falsche Verzeichnis verschieben könnten).
quelle