Mover uma lista de arquivos (em um arquivo de texto) para um diretório?

7

Eu tenho uma lista de arquivos, com seus caminhos completos, um por linha em um arquivo "files.txt"

Eu estava tentando mover todos esses arquivos do local original para um novo diretório.

Eu gravei no diretório onde eles moram agora e publiquei

for file in ~/Desktop/files.txt do mv $file ~/newfolder

mas nada acontece. Tenho certeza de que estou sentindo falta de algo óbvio

    
por Steve 18.01.2013 / 17:54

4 respostas

7

O bash não lê o conteúdo do arquivo, a menos que você o diga.

for file in $(cat ~/Desktop/files.txt); do mv "$file" ~/newfolder; done
    
por 18.01.2013 / 18:16
6

Você precisa dizer ao seu loop para ler o arquivo, caso contrário, ele está apenas executando:

mv ~/Desktop/files.txt ~/newfolder

Além disso, como nerdwaller disse, você precisa de separadores. Tente isto:

while read file; do mv "$file" ~/newfolder; done < ~/Desktop/files.txt

Se os seus caminhos ou nomes de arquivo contiverem espaços ou outros caracteres estranhos, talvez seja necessário fazer isso:

while IFS= read -r file; do mv "$file" ~/newfolder; done < ~/Desktop/files.txt

Observe as cotas " em torno da variável $file .

    
por 18.01.2013 / 18:16
3

Se os nomes dos arquivos não contiverem espaço em branco:

mv -t dest_dir $(< text.file)

é provavelmente a maneira mais concisa.

Se houver espaço em branco nos nomes de arquivos

while IFS= read -r filename; do mv "$filename" dest_dir; done < test.file

é seguro.

    
por 18.01.2013 / 21:40
0

Possivelmente

mv -t dest_dir $(sed 's|^|"|;s|$|"|' text.file)

também lida com nomes de arquivos com espaços enquanto ainda está usando um único comando mv e nenhum loop. Não testado.

    
por 20.02.2016 / 18:21

Tags