Ich versuche nach den Dateien zu suchen Erstellt in den Monaten Juni, Juli und August. Ich habe diese Methode verwendet
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
aber es funktioniert nicht.
Ich versuche nach den Dateien zu suchen Erstellt in den Monaten Juni, Juli und August. Ich habe diese Methode verwendet
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
aber es funktioniert nicht.
Antworten:
Sie können mehrere Muster wie folgt abgleichen:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
Dies gibt alle Übereinstimmungen für Juni, Juli oder August zurück. Sie benötigen die print
Anweisung nicht, da dies die awk
Standardaktion ist.
awk '/Jun|Jul|Aug/'
or schreiben könnenawk '/Ju[nl]|Aug/'
In der Regel ist es eine sehr schlechte Idee, die Ausgabe von ls zu analysieren . Ein besserer Weg, um zu tun, was Sie wollen, ist
stat -c "%n %y" * | grep 2013-0[678]
Alternativ können Sie nur das letzte Feld aktivieren, um sich vor dem unwahrscheinlichen Fall zu schützen, dass der Dateiname selbst ein Datum ist:
stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/'
Von man stat
:
-c --format=FORMAT
use the specified FORMAT instead of the default; output a new‐
line after each use of FORMAT
%y time of last modification, human-readable
%n file name
| awk '$NF ~ /2013-0[678]/'
um nur das letzte Ausgabefeld zu überprüfen, in dem (unwahrscheinlich?) Sogar, dass der Name einer Datei mit dem regulären Ausdruck übereinstimmt, auch wenn das Datum nicht übereinstimmt.
ls
ist ein Befehl zum Anzeigen von Informationen zu Dateien, die von Menschen gelesen werden können. Verwenden Sie es nicht in Skripten .
Der Befehl zum Suchen von Dateien in einem Verzeichnisbaum, der bestimmten Kriterien entspricht, lautet find
. Wenn Sie GNU find (dh nicht eingebettetes Linux oder Cygwin) oder FreeBSD find (dh FreeBSD oder OSX) haben, können Sie -newermt
Dateien abgleichen, die zuletzt nach einem bestimmten Datum geändert wurden.
find . -newermt '1 June' ! -newermt '1 September' -print
Fügen Sie ein Jahr hinzu, wenn Sie Dateien in einem bestimmten Jahr abgleichen möchten, und nicht das Kalenderjahr, in dem das Skript ausgeführt wird.
Wenn Ihre Find-Implementierung nicht vorhanden ist -newermt
, müssen Sie damit auskommen -newer
, wodurch das Datum der gefundenen Datei find
mit einer festen Datei verglichen wird . Verwenden Sie touch
diese Option, um temporäre Dateien mit dem Datum zu erstellen, das Sie als Begrenzung verwenden möchten.
dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"
[...]
stimmt das Konstrukt mit einem einzelnen Zeichen überein, bei dem es sich um eines der Zeichen in Klammern handeln kann. Ihr Ausdruck stimmt also mitJJA
oderJug
(J
von[Jun]
,u
von[Jul]
undg
von[Aug]
) überein, aber nicht mit den Monatsabkürzungen, auf die Sie gehofft haben.