Eu tenho um arquivo (ordered_names) que está no formato
pub 000.html
pub.19 001.html
por cerca de 300 linhas, e não consigo encontrar uma maneira de alimentar isso com o comando mv.
Eu li Fornecer strings armazenadas em um arquivo como uma lista de argumentos para um comando? , mas não consegui o que vim buscar.
Aqui estão algumas das tentativas que fiz:
for line in "$(cat ../ordered_files.reversed)"; do mv $(echo "$line"); done
for line in "$(cat ../ordered_files.reversed)"; do echo mv $(echo $line | cut -d' ' -f 1) $(echo $line | cut -d' ' -f 2) ; done
Tentar:
Isso pressupõe que os nomes de arquivo em cada linha no arquivo de entrada sejam separados por espaços. Isso, é claro, só funciona se os nomes dos arquivos não contiverem espaços. Se o fizerem, você precisará de um formato de entrada diferente.
Como funciona
while read -r file1 file2; do
Isso inicia um
while
loop. O loop continua enquanto a entrada estiver disponível. Para cada linha de entrada, dois parâmetros são lidos:file1
efile2
.mv -n -- "$file1" "$file2"
Isso se move
file1
parafile2
.A opção
-n
protege você de substituir qualquer arquivo no destino. Claro, se for sua intenção sobrescrever arquivos, remova esta opção.A string
--
sinaliza o fim das opções. Isso protege você de problemas caso algum dos nomes de arquivo comece com uma extensão-
.done
Isso sinaliza o fim do
while
loop.<inputfile
Isso diz ao
while
loop para obter sua entrada de um arquivo chamadoinputfile
.