Acredito que farei duas perguntas separadas, mas o contexto é o mesmo, então espero que esteja tudo bem.
Tenho uma saída de alguns processos apresentados abaixo (que não posso modificar).
25978.csv
26044.csv
26865.csv
26914.csv
27013.csv
O que estou tentando alcançar com esta entrada é a 'operação simples' de inserir a data no nome do arquivo ou substituir esse nome de arquivo. A data desejada geralmente corresponde à data da última modificação, portanto é possível for f in *.csv; do mv -- "$f" "$f-$(date +%Y%m%d -r "${f}")"; done
renomear o oneliner. Às vezes, a data da última modificação está a um dia do que procuro, então estou me perguntando se existe uma maneira fácil (oneliner?) De diminuir esse valor numérico (por exemplo, transformar 20160506 em 20160505).
20150506.csv
20150507.csv
20150508.csv
20150509.csv
20150510.csv
O segundo caso. A data da última modificação não é útil, pois está completamente incorreta. Mas o número no nome do arquivo aumenta junto com a data esperada. Posso inserir algum valor numérico no nome do arquivo e aumentar o mesmo valor em um para cada arquivo subsequente? Você vê o que estou tentando realizar? Só não sei como ;)...
EDITAR Encontrei uma resposta para minha perguntaaqui- mais ou menos... Talvez eu simplesmente não consiga usar?
cnt=0
for i in *; do
let cnt=cnt+1
mv "$i" "$(echo "${i}_${cnt}" | awk -F_ '{print $1"_"$3}')"
done
Eu sei como modificá-lo de acordo com minhas necessidades, mas no final a saída é a mesma para todos os arquivos, como 'o incremento não está funcionando'. Salvei o código acima como rename.sh
e lembrei de permitir sua execução por chmod 755 rename.sh
, mas ainda assim não consegui nada ...
Responder1
Espero que não seja um crime, para responder à minha própria pergunta. Encontrei uma solução parcial emPergunte ao Ubuntu- funciona para mim, pelo menos no primeiro caso.
touch -d "$(date -R -r filename) - 2 hours" filename
E para modificação de todos os arquivos da subpasta, digite:
find DIRECTORY -print | while read filename; do
# do whatever you want with the file
touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done