Tenho que renomear um grande número de arquivos de acordo com uma lista do Excel (sim, eu sei).
Então minha abordagem foi exportar os nomes dos arquivos do Excel para filenames.csv
este formato:
this_is_a_file.ext ; new_filename_1.ext
this_is_another_file.ext ; new_filename_2.ext
this is a filename with spaces.ext ; new_filename_3.ext
Para renomear, quero usar algo como este script bash:
lstrn() {
while IFS= read -r line; do
oldfilename=`echo $line | awk '{print $1}'`
newfilename=`echo $line | awk '{print $3}'`
mv $oldfilename $newfilename
done < $1
}
Com o qual eu correria:
$ lstrn filenames.csv
Isso funciona bem, desde que nem o nome do arquivo antigo nem o novo tenham espaços.
Pelo que entendi, o $1
é o bloco de texto com o nome do arquivo antigo, o $2
seria o ;
e o $3
é o novo nome do arquivo em cada linha do meu filenames.csv
.
Acho que entendi por que isso não funcionaria com espaços nos nomes de arquivo... Preciso substituir a awk '{print $1}'
parte, certo?
Estou completamente perdido sobre como fazer isso funcionar com espaços e realmente apreciaria se alguém tivesse uma ideia de como fazer isso!