Use rename
como parte dos comandos Perl.
find . -type f -name '*20170919*' -execdir
rename -n 's/20170919/20170918/' '{}' \;
Use execdir
enquanto estiver executando seu comando part para ser executado para o arquivo localizado no caminho relativo em que execdir
retorna. Isso evitará passar o caminho completo do arquivo (em relação ao diretório de trabalho atual) e evitar que uma pasta com o mesmo padrão esteja renomeando errado, em vez do próprio nome do arquivo.
Se todos os seus arquivos estiverem no diretório único, abaixo de um liner rename
é suficiente.
rename -n 's/20170919/20170918/' *20170919*
Remove -n
quando você confia no resultado da renomeação para ter renomeação real. Talvez seja necessário adicionar -v
para ver o que está sendo renomeado.
No final, talvez seja necessário ter a data de hoje se quiser que isso seja feito todos os dias para vários arquivos. em seguida, use o comando date
da seguinte forma em $(...)
(substituição de comando) entre aspas duplas.
find . -type f -name "*$(date +"%Y%m%d")*" -execdir
rename -n "s/$(date +"%Y%m%d")/$(date -d "-1day" +"%Y%m%d")/" '{}' \;
P.s, como você está usando csh
shell, você precisa usar '...'
em vez de $(...)
, ou melhor alternar para novos shells como bash
, zsh
.
find ./ -type f -name "*'date +"%Y%m%d"'*" -execdir
rename -n "s/'date +"%Y%m%d"'/'date -d "-1day" +"%Y%m%d"'/" '{}' \;