Tem uma lista de arquivos, mova-os usando um comando

2

Eu executei um comando que encontra muitos arquivos com base em alguns critérios de pesquisa. Ele retorna os arquivos assim:

./somepath/somepath/file.something
./asdf/asdf/s.php
./etc/a.php
./a/b/c/d/e/f/g.jpg

Então eu estava pensando, se eu capturar essa saída em um arquivo (ou seja, um arquivo por linha), alguém pode me ajudar a escrever um comando que percorre o arquivo e move os arquivos um por um para um diretório especificado? / p>

Obrigado antecipadamente.

    
por mqchen 02.11.2010 / 15:41

3 respostas

3
while read -r filename
  do
  mv -- "$filename" directory
done < list_of_files.txt

Não testado (estou em um PC de trabalho executando o Windows), mas deve funcionar.

    
por 02.11.2010 / 16:02
2
your_command | xargs -I% mv "%" dest_dir

Se o seu comando for find ou você tiver alguma forma de terminar os nomes dos arquivos com um nulo:

your_command | xargs -0 -I% mv "%" dest_dir

ou

find [find-args] -print0 | xargs -0 -I% mv "%" dest_dir

Usar nulos para finalizar nomes de arquivos permite que isso funcione com nomes de arquivos que podem conter espaços, novas linhas, etc.

Você também pode usar xargs para processar seu arquivo, se você já o criou:

xargs -a filename -I% mv "%" dest_dir
    
por 02.11.2010 / 17:26
-1

Outra opção, se os nomes dos arquivos não contiverem nenhum espaço em branco, seria

mv 'search_command_here' dest_directory

(A sintaxe do backtick também é um bash-ism, mas a questão afirma especificamente que isso é no Linux e todas as principais distribuições do Linux usam o bash por padrão.)

    
por 02.11.2010 / 17:32