Se você tiver um arquivo assim:
old_name1, new_name1
old_name2, new_name2
old_name3, new_name3
Você pode fazer um pequeno truque sujo:
sed 's/^/mv -vi "/;s/, /" "/;s/$/";/' < names.csv | bash -
O sed commnds (delimitado por ponto e vírgula) faz isso ( s
é para substituto, /
é usado como um delimitador, qualquer outro caractere faria, @
também é usado com frequência):
-
s/^/mv -vi "/
- adicionamv -vi "
no início de cada linha (^
é o início da linha); -
s/, /" "/
- substitui a vírgula seguida por um espaço com" "
; -
s/$/";/
- acrescenta aspas duplas a todas as linhas ($
significa fim de linha)
e, portanto, a saída de sed
será esta:
mv -vi "old_name1" "new_name1"
mv -vi "old_name2" "new_name2"
mv -vi "old_name3" "new_name3"
que será alimentado para bash
para ser executado. As aspas em torno de nomes de arquivos não são obrigatórias, elas apenas guardam todos os espaços possíveis nos nomes dos arquivos (no entanto, elas não ajudarão contra espaços seguidos por uma vírgula, pois isso é usado como delimitador). o -v
instrui mv
a mostrar o que está fazendo (caso algo dê errado, você saberá o que aconteceu), -i
fará com que ele pergunte se foi para sobrescrever o arquivo já existente.