Você pode combinar vários padrões, como:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
Isso retorna todas as correspondências para junho, julho ou agosto.
Você não precisa da instrução print
, pois essa é a ação padrão de awk
.
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.
Por favor, ajude-me a corrigir a sintaxe.
Como regra geral, é uma péssima ideia analisar a saída de ls . A melhor maneira de fazer o que você quer é
stat -c "%n %y" * | grep 2013-0[678]
Como alternativa, marque apenas o último campo para proteger contra o caso improvável em que o próprio nome do arquivo é 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
ls
é um comando para exibir informações sobre arquivos em um legível humano. Não use em scripts .
O comando para localizar arquivos em uma árvore de diretórios que atenda a determinados critérios é find
. Se você tiver o GNU find (isto é, Linux ou Cygwin não integrado) ou FreeBSD find (por exemplo, FreeBSD ou OSX), você pode usar -newermt
para corresponder arquivos que foram modificados pela última vez após uma determinada data.
find . -newermt '1 June' ! -newermt '1 September' -print
Adicione um ano se quiser corresponder arquivos em um ano específico, em vez do ano civil em que o script é executado.
Se a sua implementação de localização não tiver -newermt
, você terá que se contentar com -newer
, que compara a data do arquivo que find
encontrou 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"
Tags awk shell scripting shell-script rhel