
Mein Ziel ist es, die im aktuellen Monat erstellte Datei in einem Verzeichnis zu erhalten.
Der Befehl scheint korrekt zu sein, liefert aber kein Ergebnis:
Date=`date '+%b'`
echo $Date
Oct
ls -l | awk -v d="$Date" '/d/ {print $NF}'
Antwort1
Sie sollten es folgendermaßen verwenden:
ls -l | awk -v d="$Date" '$0 ~ d {print $NF}'
Erklärung istHier
Aber vielleicht ist es besser, es find
in Ihrem Skript zu verwenden.
find . -maxdepth 1 -type f -daystart -ctime -`date "+%d"`
Wenn Sie awk
stattdessen klassisch haben gawk
:
find * -prune -type f -cmin -`date '+%d %H %M' | awk '{print ($1*24+$2)*60+$3}'`
Antwort2
Das Problem hier ist, dass awk
es keine Möglichkeit gibt, zu erkennen, dass das d
Muster die Variable mit diesem Namen darstellen soll: awk
versucht, ein Literal abzugleichen d
. Sie können stattdessen die Parametererweiterung verwenden:
ls -l | awk "/$Date/ {print \$NF}"
Dennoch sind zwei Dinge zu beachten:
Die in der Ausgabe aufgeführte Zeit
ls -l
ist der Zeitstempel: der Zeitpunkt der letzten Änderung der Datei, nicht der Zeitpunkt ihrer Erstellung. Die Zeitpunkte der Dateierstellung sindbestenfalls unzuverlässigund im schlimmsten Fall nicht verfügbar.Dusollte die Ausgabe von ls nicht analysieren
Verwenden Sie
find
stattdessen, wie indchirikovs Antwort.