
Meu objetivo é colocar o arquivo criado no mês atual em um diretório.
Parece que o comando está correto, mas não gera nenhum resultado:
Date=`date '+%b'`
echo $Date
Oct
ls -l | awk -v d="$Date" '/d/ {print $NF}'
Responder1
Você deve usá-lo desta forma:
ls -l | awk -v d="$Date" '$0 ~ d {print $NF}'
A explicação éaqui
Mas pode ser melhor usar find
no seu script.
find . -maxdepth 1 -type f -daystart -ctime -`date "+%d"`
Se você tiver clássico awk
em vez de gawk
:
find * -prune -type f -cmin -`date '+%d %H %M' | awk '{print ($1*24+$2)*60+$3}'`
Responder2
O problema aqui é que awk
não há como dizer que o d
interior do padrão pretende representar a variável com esse nome: awk
está tentando corresponder a um literal d
. Você pode usar a expansão de parâmetros:
ls -l | awk "/$Date/ {print \$NF}"
Dito isto, duas coisas a serem observadas:
A hora listada na
ls -l
saída é o carimbo de data/hora: a última vez que o arquivo foi modificado, não criado. Os tempos de criação de arquivos sãonão confiável na melhor das hipótesese indisponível na pior das hipóteses.Vocênão deveria analisar a saída de ls
Use
find
em vez disso, como emresposta de dchirikov.