Ich versuche, nach den in den Monaten Juni, Juli und August erstellten Dateien zu suchen. Ich habe diese Methode verwendet
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
aber es funktioniert nicht.
Antwort1
Sie können mehrere Muster wie folgt abgleichen:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
print
Dies gibt alle Übereinstimmungen für Juni, Juli oder August zurück. Sie benötigen die Anweisung nicht, da dies awk
die Standardaktion ist.
Antwort2
Generell ist es eine sehr schlechte Idee,Analysieren Sie die Ausgabe von lsEin besserer Weg, das zu tun, was Sie wollen, ist
stat -c "%n %y" * | grep 2013-0[678]
Alternativ können Sie nur das letzte Feld überprüfen, um den unwahrscheinlichen Fall abzusichern, dass der Dateiname selbst ein Datum ist:
stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/'
Aus 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
Antwort3
ls
ist ein Befehl zum Anzeigen von Informationen über Dateien in einer für Menschen lesbaren Form.Verwenden Sie es nicht in Skripten.
Der Befehl zum Suchen von Dateien in einem Verzeichnisbaum, die bestimmten Kriterien entsprechen, lautetfind
. Wenn Sie über GNU find (also nicht eingebettetes Linux oder Cygwin) oder FreeBSD find (also FreeBSD oder OSX) verfügen, können Sie damit -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 im Kalenderjahr, in dem das Skript ausgeführt wird.
Wenn Ihre Find-Implementierung nicht über verfügt -newermt
, müssen Sie sich mit begnügen -newer
, das das Datum der find
gefundenen Datei mit einer festen Datei vergleicht. Verwenden Sie , touch
um temporäre Dateien mit dem Datum zu erstellen, das Sie als Grenze 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"