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.
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.
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
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.)