while read line ; do
mv $line
done < data_lat_long.txt
Redirecione o conteúdo de data_lat_long.txt
para um loop while
que usa read
para ler em cada linha do arquivo e para cada linha atribuí-lo a uma variável chamada $line
. Em seguida, execute mv
com o conteúdo de $line
como um argumento (que é de e para as partes que você especificou no arquivo data_lat_long.txt
). Continue em loop até o final do arquivo.
Observe que isso implicitamente espera que nenhum nome de arquivo no seu data_lat_long.txt
contenha espaços (para que haja apenas duas colunas).
Se os arquivos tiverem espaços, sugiro um separador de vírgula no seu arquivo:
1,space file1
2,space file2
3,space file3
e, em seguida, use:
while IFS=',' read -a files
do
mv "${files[0]}" "${files[1]}"
done < list.txt
Isso faz uso da opção -a
de read
, que atribui o texto separado por IFS
(neste caso, vírgula) a uma matriz chamada $files
. Em seguida, indexamos os vários elementos no mv
e citamos os argumentos com aspas duplas ""
. Assim, o valor da matriz é expandido na execução do comando mv
e , de forma que o espaço no arquivo não seja visto como separador de argumentos por mv
. mv 1 space file1
não faz a mesma coisa que mv "1" "space file1"
. O comando anterior tenta mover arquivos / diretórios chamados 1
e space
para um diretório chamado file1
.