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 printdichiarazione poiché si tratta awkdell'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 -newermtper 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 findtrovato con un file fisso. utilizzare touchper 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 corrispondeJJAoJug(Jda[Jun],uda[Jul]egda[Aug]) ma non le abbreviazioni del mese che speravi di trovare.