gil*_*och 185 command-line mv
我在某个目录(以及许多其他文件)中有一堆要移动的文件。
幸运的是,我想移动的所有文件的名称中都包含一个特定的标识符,因此我ls | grep IDENTIFIER可以获得要移动的文件的确切列表。
但是,我怎样才能mv file /path/to/dest/folder/一次执行,而不是一个一个执行(有很多文件要移动)?
小智 260
你可以使用:
mv -t DESTINATION file1 file2 file3
Run Code Online (Sandbox Code Playgroud)
以下也有效,但我不确定是否mv多次调用,因为grep将为每个匹配输出一个新行:
mv -t DESTINATION `ls|grep IDENTIFIER`
Run Code Online (Sandbox Code Playgroud)
Eva*_*lva 122
如果要移动ABC-IDENTIFIER-XYZ.ext或IDENTIFIER-XYZ.xml,可以使用:
mv *IDENTIFIER* ~/YourPath/
Run Code Online (Sandbox Code Playgroud)
*是零个或多个字符的通配符,这意味着零个或多个字符,后跟IDENTIFIER,后跟零个或多个字符。
这将移动所有这些文件包含了IDENTIFIER您指定的。
Ach*_*chu 30
您可以使用通配符。
例如,要移动所有具有.doc扩展名的文件:
mv *.doc /path/to/dest/folder/
Run Code Online (Sandbox Code Playgroud)
这会将当前目录下的所有 doc 文件移动到特定目标。
编辑
要回答评论:
但要移动的文件列表不是由扩展名决定的。一些文件被命名为:
ABC-IDENTIFIER-XYZ.ext有的只是IDENTIFIER-XYZ.ext所有具有不同的扩展,主要xml还是properties。
mv *.ext *.xml *.txt /path/to/dest/folder/
Run Code Online (Sandbox Code Playgroud)
小智 28
如果您想移动一组任意文件(名称和类型没有共同模式),您可以按照 Rajanand 先生说的进行:首先转到包含您要移动的文件的目录
mv file1.ext1 file2.ext2 file3.ext3 /destination/
Run Code Online (Sandbox Code Playgroud)
如果文件分散在不同的目录中,您只需在mv命令中指定每个文件的路径。
小智 12
我使用 tuomaz 的技术,但稍作修改:
mv file1 file2 file3 -t DESTINATION
Run Code Online (Sandbox Code Playgroud)
我发现这更容易记住并且更难搞砸,因为它使用与 vanilla mv 操作相同的顺序:
mv file1 DESTINATION
Run Code Online (Sandbox Code Playgroud)
Sru*_*uli 10
如果文件在同一个目录中,您可以使用
mv /path/to/source/dir/{file1,file2,*.ext1,*.ext2} /path/to/destination/
Run Code Online (Sandbox Code Playgroud)
(在 Ubuntu 16.04 中测试)
使用这个命令:
mv `ls|grep IDENTIFIER` /path/to/dest/folder
Run Code Online (Sandbox Code Playgroud)
但是,不建议将 ls 用于此类用途。请改用find命令。
小智 5
find -type f -name "[range]" -exec mv {} target-directory ';'
Run Code Online (Sandbox Code Playgroud)
此命令会将具有任何模式/范围的文件名移动到目标目录。
例如。
find -type f -name "file[1-50000]" -exec mv {} target-directory ';'
Run Code Online (Sandbox Code Playgroud)
它将把名称为file1, file2... 的文件移动file50000到target-directory.