Para o registro, a [...]construção corresponde a um único caractere, que pode ser qualquer um dos caracteres entre colchetes. Portanto, sua expressão corresponde JJA ou Jug( Jde [Jun], ude [Jul]e gde [Aug]), mas não as abreviações do mês que você esperava corresponder.
tripleee
Respostas:
12
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 printinstrução, pois essa é awka ação padrão.
awk entende regexps prolongados, por isso para um padrão tão simples quanto que você poderia escrevê-lo como awk '/Jun|Jul|Aug/'ouawk '/Ju[nl]|Aug/'
cas
5
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=FORMATuse the specified FORMAT instead of the default; output a new‐
line after each useof FORMAT%y time oflast modification, human-readable%n file name
Também é um bom exemplo. Eu nunca verifiquei STAT antes. obrigado pela informação excelente
OmiPenguin 29/09
Talvez mude para ... | 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.
tripleee
3
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 -newermtpara corresponder aos arquivos que foram modificados pela última vez após uma determinada data.
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 findencontrado com um arquivo fixo. use touchpara criar arquivos temporários com a data que você deseja usar como limite.
[...]
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.Respostas:
Você pode corresponder a vários padrões como este:
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.fonte
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 é
Como alternativa, verifique apenas o último campo para proteger contra o caso improvável em que o nome do arquivo em si é uma data:
De
man stat
:fonte
| 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.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 arquivofind
encontrado com um arquivo fixo. usetouch
para criar arquivos temporários com a data que você deseja usar como limite.fonte