Batch renomeia vários arquivos com data e data e hora anexadas

1

Eu preciso de uma maneira automática de adicionar um carimbo de data e hora criado em todos os arquivos .pdf dentro de algum diretório como este; testfile.pdf precisa ser testfile-YYY.MM.DD_HH.MM.SS.pdf Estou usando o terminal OSX.

Eu tenho este código:

    cd "/Users/***/Documents/testmapa"
old_filename=""testfile.pdf"
new_filename=${old_filename%.*}$(stat -f %SB -t "%Y%m%d_%H%M%S" "$old_filename").${old_filename##*.}
mv "$old_filename" "$new_filename"

E isso faz o trabalho, mas em um arquivo, como eu aplico isso em todos os arquivos pdf em algum diretório. Basicamente, eu preciso de um arquivo que "ao clicar" execute algum código e adicione essa data criada a um nome de arquivo em todos os arquivos .pdf que estão no diretório em que o arquivo foi clicado. E uma pergunta, esse código pode ser executado em subpastas? Eu tenho o perl instalado, mas não sei como usá-lo. Eu só sei que tem renomear função e ctime stat, mas não sei como escrever esse código.

    
por ikiK 24.11.2016 / 12:24

1 resposta

2

Algo assim funciona bem para mim:

for files in /home/gv/Desktop/PythonTests/*.sh; do
old_filename=$files
old_filename_stripped=$(basename -a $files)
echo "filename full : $old_filename - file name stripped: $old_filename_stripped"
done

saída:

filename full : /home/gv/Desktop/PythonTests/advfind2.sh - file name stripped: advfind2.sh
filename full : /home/gv/Desktop/PythonTests/advfind.sh - file name stripped: advfind.sh
filename full : /home/gv/Desktop/PythonTests/appslist(draft).sh - file name stripped: appslist(draft).sh
filename full : /home/gv/Desktop/PythonTests/appslist.sh - file name stripped: appslist.sh

Código aprimorado para incluir espaços e subdiretórios:

IFS=$'\n'
for files in $(find /home/gv/Desktop/PythonTests/ -name "*.txt" ); do
old_filename="$files"
old_filename_stripped=$(basename -a "$files")
echo "filename full : $old_filename - file name stripped: $old_filename_stripped"
done
unset IFS

Saída:

filename full : /home/gv/Desktop/PythonTests/b.txt - file name stripped: b.txt
filename full : /home/gv/Desktop/PythonTests/c.txt - file name stripped: c.txt
filename full : /home/gv/Desktop/PythonTests/a ver 1.txt - file name stripped: a ver 1.txt
filename full : /home/gv/Desktop/PythonTests/d.txt - file name stripped: d.txt
filename full : /home/gv/Desktop/PythonTests/a.txt - file name stripped: a.txt
filename full : /home/gv/Desktop/PythonTests/appsfiles/a.txt - file name stripped: a.txt

PS: Veja a última linha, é um subdiretório.

    
por 24.11.2016 / 12:40