有一个文件列表,使用一个命令移动它们

有一个文件列表,使用一个命令移动它们

我运行了一个命令,根据一些搜索条件找到了很多文件。它返回的文件如下:

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

所以我想知道,如果我将这个输出捕获到一个文件中(即每行一个文件),有人能帮我编写一个命令来遍历该文件并将文件逐个移动到指定的目录吗?

先感谢您。

答案1

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

未经测试(我在运行 Windows 的工作电脑上)但应该可以工作。

答案2

your_command | xargs -I% mv "%" dest_dir

如果您的命令是find或者您有某种方式以空值终止文件名:

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

或者

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

使用空值终止文件名可以允许它处理可能包含空格、换行符等的文件名。

如果您已经创建了文件,您还可以使用它xargs来处理它:

xargs -a filename -I% mv "%" dest_dir

答案3

如果文件名不包含任何空格,则另一个选项是

mv `search_command_here` dest_directory

(反引号语法也是 bash 主义,但问题明确指出这是在 Linux 上,并且所有主流 Linux 发行版默认都使用 bash。)

相关内容