
Tenho alguns arquivos que foram escritos como: test_026542_time0663550.5.jpeg
e gostaria de renomeá-los test_0663550.jpeg
para poder classificar facilmente pelo número do pedido, pois tenho alguns erros com os nomes atuais.
Responder1
Use a rename
função. É básico (forma de protótipo) é $ rename s/"SEARCH"/"REPLACE"/g *
. Isso substitui o arquivo "SEARCH" por "REPLACE". O /g
meio é global, então se você tivesse um "SEARCH SEARCH.jpg", ele seria renomeado como "REPLACE REPLACE.jpg". O *
é o tipo de extensão como .mp3
ou .pdf
. Então, seu exemplo seria:
$ rename s/'test_026542_time0663550.5.jpeg'/'test_0663550_.jpeg'/g *
Essedeveria ajudar.
Responder2
Minha bateria está acabando, então vou resumir
Encontrar + awk oneliner
find . -type f -printf "%f\n" | awk -F "_"
'{ORIG=$0;gsub(/\_[[:digit:]].*\_time/,"_");gsub(/\.[[:digit:]].*\.jpeg/,".jpeg"); NEW=$0;cmd="mv "ORIG"
"NEW;system(cmd)}'
Demonstração
testdir2:$ ls
test_13442_time1446925878.1.jpeg test_27796_time1446925887.4.jpeg
test_25495_time1446925884.3.jpeg test_29681_time1446925881.2.jpeg
testdir2:find . -type f -printf "%f\n" | awk -F "_"
'{ORIG=$0;gsub(/\_[[:digit:]].*\_time/,"_");gsub(/\.[[:digit:]].*\.jpeg/,".jpeg"); NEW=$0;cmd="mv "ORIG"
"NEW;system(cmd)}'
testdir2:$ ls
test_1446925878.jpeg test_1446925881.jpeg test_1446925884.jpeg test_1446925887.jpeg