当前位置: 首页>>技术教程>>正文


如何一次将多个文件移动到特定的目标目录?

, ,

问题描述

我在一些目录(以及许多其他文件)中获得了一些我想要移动的文件。

幸运的是,我想移动的所有文件都在其名称中包含某个标识符,因此我可以通过ls | grep IDENTIFIER获取要移动的文件的确切列表。

但是,我怎么能一次执行mv file /path/to/dest/folder/,而不是一个接一个地执行(有很多文件需要移动)?

最佳解决思路

如果您想移动ABC-IDENTIFIER-XYZ.extIDENTIFIER-XYZ.xml,您可以使用:

mv *IDENTIFIER* ~/YourPath/

*是零个或多个字符的通配符,这意味着零个或多个字符,其后是IDENTIFIER,后跟零个或多个字符。

这将移动包含您指定的IDENTIFIER的所有文件。

次佳解决思路

你可以使用

mv -t DESTINATION file1 file2 file3

mv -t DESTINATION `ls|grep IDENTIFIER`

作品,但我不确定是否多次调用mv,因为grep会为每个匹配输出一个新行。

第三种解决思路

您可以使用wildcards

例如:移动所有扩展名为.doc的文件

mv *.doc /path/to/dest/folder/

这会将当前目录下的所有doc文件移动到特定目标。

编辑

回答评论。

mv *.ext *.xml *.txt /path/to/dest/folder/

第四种思路

如果您想要移动一组不相关的文件(名称和类型中没有常见模式),您可以像Rajanand先生说的那样执行操作:首先转到包含要移动文件的目录

mv file1.ext1 file2.ext2 file3.ext3.. /destination/

如果文件分散在不同的目录中,则只需在移动命令中指定每个文件的路径

第五种思路

我使用tuomaz的技术,但略有修改:

mv file1 file2 file3 -t DESTINATION

我发现这更容易记住,因为它使用与香草mv操作相同的顺序:

mv file1 DESTINATION

第六种思路

使用此命令:

mv `ls|grep IDENTIFIER` /path/to/dest/folder  

但是,ls不推荐用于这种用途。改用find命令。

第七种思路

如果您有太多的文件需要移动,那么对于mv命令(或其他命令,如rm),实际上可能有太多文件。我建议使用xargs以像时尚一样循环移动每个文件。解决这个问题的一种方法是:

ls -1 | grep IDENTIFIER | xargs -i mv {} /path/to/dest/folder/

ls -1(减一)确保每行只有一个文件名。如果您隐藏了ls命令的别名,则可以在一行中包含多个文件名,并无意中移动您不打算移动的文件。

第八种思路

您可以使用ls的输出输入到mv commnad中

mv $(ls | grep IDENTIFIER) /path/to/dest/dir

$()之间的命令返回与您的搜索匹配的文件名列表,并且可以作为mv命令的参数提供。

第九种思路

find -type f -name "[range]" -exec mv {} target-directory ';'

该命令会将文件名以任何模式/范围移动到target-directory。

例如。

find -type f -name "file[1-50000]" -exec mv {} target-directory ';'

它会将名称为file1file2file50000的文件移动到target-directory

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/558.html,未经允许,请勿转载。