Estou tentando pesquisar os arquivos criados nos meses de junho, julho e agosto. Eu usei esse método
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
mas não está funcionando.
Estou tentando pesquisar os arquivos criados nos meses de junho, julho e agosto. Eu usei esse método
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
mas não está funcionando.
Respostas:
Você pode corresponder a vários padrões como este:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
Isso retorna todas as correspondências para junho, julho ou agosto. Você não precisa da print
instrução, pois essa é awk
a ação padrão.
awk '/Jun|Jul|Aug/'
ouawk '/Ju[nl]|Aug/'
Como regra geral, é uma péssima idéia analisar a saída de ls . Uma maneira melhor de fazer o que você quer é
stat -c "%n %y" * | grep 2013-0[678]
Como alternativa, verifique apenas o último campo para proteger contra o caso improvável em que o nome do arquivo em si é uma data:
stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/'
De 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]/'
para verificar apenas o último campo de saída, no (improvável?) Mesmo que o nome de um arquivo corresponda à regex mesmo quando a data não.
ls
é um comando para exibir informações sobre arquivos em um legível por humanos. Não o use em scripts .
O comando para localizar arquivos em uma árvore de diretórios que corresponde a certos critérios é find
. Se você possui o GNU find (por exemplo, Linux ou Cygwin não incorporado) ou o FreeBSD find (por exemplo, FreeBSD ou OSX), pode usar -newermt
para corresponder aos arquivos que foram modificados pela última vez após uma determinada data.
find . -newermt '1 June' ! -newermt '1 September' -print
Adicione um ano se desejar corresponder arquivos em um ano específico, em vez do ano civil em que o script for executado.
Se sua implementação de localização não tiver -newermt
, você terá que se contentar com -newer
, que compara a data do arquivo find
encontrado com um arquivo fixo. use touch
para criar arquivos temporários com a data que você deseja usar como 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"
[...]
construção corresponde a um único caractere, que pode ser qualquer um dos caracteres entre colchetes. Portanto, sua expressão correspondeJJA
ouJug
(J
de[Jun]
,u
de[Jul]
eg
de[Aug]
), mas não as abreviações do mês que você esperava corresponder.