Sto cercando di cercare i file creati nei mesi di giugno, luglio e agosto. Ho usato questo metodo
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
ma non funziona.
Sto cercando di cercare i file creati nei mesi di giugno, luglio e agosto. Ho usato questo metodo
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
ma non funziona.
Risposte:
Puoi abbinare su più modelli in questo modo:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
Questo restituisce tutte le partite per giugno, luglio o agosto. Non è richiesta la print
dichiarazione poiché si tratta awk
dell'azione predefinita.
awk '/Jun|Jul|Aug/'
oawk '/Ju[nl]|Aug/'
Come regola generale, è una pessima idea analizzare l'output di ls . Un modo migliore per fare quello che vuoi è
stat -c "%n %y" * | grep 2013-0[678]
In alternativa, controlla solo l'ultimo campo per proteggerti dal caso improbabile in cui il nome del file stesso è una data:
stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/'
Da 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]/'
per controllare solo l'ultimo campo di output, nel (improbabile?) Anche che il nome di un file corrisponda alla regex anche quando la data no.
ls
è un comando per visualizzare informazioni sui file in una lettura umana. Non usarlo negli script .
Il comando per trovare i file in un albero di directory che soddisfa determinati criteri è find
. Se hai GNU find (ovvero Linux non incorporato o Cygwin) o FreeBSD find (cioè FreeBSD o OSX), puoi usare -newermt
per abbinare i file che sono stati modificati l'ultima volta dopo una certa data.
find . -newermt '1 June' ! -newermt '1 September' -print
Aggiungi un anno se desideri abbinare i file in un anno specifico, anziché l'anno di calendario in cui viene eseguito lo script.
Se l'implementazione di ricerca non ha -newermt
, dovrai accontentarti -newer
, che confronta la data del file find
trovato con un file fisso. utilizzare touch
per creare file temporanei con la data che si desidera utilizzare come limite.
dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"
[...]
costrutto corrisponde a un singolo carattere, che può essere uno qualsiasi dei caratteri tra parentesi. Quindi la tua espressione corrispondeJJA
oJug
(J
da[Jun]
,u
da[Jul]
eg
da[Aug]
) ma non le abbreviazioni del mese che speravi di trovare.