幸运的是,我要移动的所有文件的名称中都包含一个特定的标识符,因此我可以
ls | grep IDENTIFIER
获取要移动的文件的确切列表。 但是,如何立即执行
mv file /path/to/dest/folder/
,而不是一个接一个地执行(有很多文件要移动)?#1 楼
如果要移动ABC-IDENTIFIER-XYZ.ext
或IDENTIFIER-XYZ.xml
,可以使用:mv *IDENTIFIER* ~/YourPath/
*
是零个或多个字符的通配符,表示零个或多个字符,后跟IDENTIFIER
,后跟零个或多个字符。这将移动包含您指定的
IDENTIFIER
的所有文件。#2 楼
您可以使用mv -t DESTINATION file1 file2 file3
和
mv -t DESTINATION `ls|grep IDENTIFIER`
有效,但是我不确定是否调用了mv是否多次重复,因为grep将为每个匹配项输出新行。
#3 楼
您可以使用通配符。示例:移动所有扩展名为.doc的文件
mv *.doc /path/to/dest/folder/
这会将当前目录下的所有doc文件移动到特定的目标位置。
编辑
来回答评论。
mv *.ext *.xml *.txt /path/to/dest/folder/
评论
但是要移动的文件列表不是由扩展名决定的。一些文件被命名为:ABC-IDENTIFIER-XYZ.ext,还有一些只是IDENTIFIER-XYZ.ext,它们都具有不同的扩展名,主要是xml或属性。
– Gilad Hoch
2012年11月8日13:25
@giladhoch编辑的怎么样?
–阿楚
2012年11月8日13:36
@gliadhoch如果您对使用grep非常满意,则可以在上方/下方看到我的答案。
–点燃
2012年11月8日13:47
因为还有其他.xml文件(例如),我不想移动,因此无法使用。
– Gilad Hoch
2012年11月8日13:50
#4 楼
如果要移动一组不相关的文件(名称和类型中没有通用模式),可以按照拉贾南德先生所说的进行:首先转到包含要移动文件的目录
mv file1.ext1 file2.ext2 file3.ext3.. /destination/
如果文件分散在不同的目录中,则只需在移动命令中为每个文件指定路径
评论
只要/ destination /已经存在(在Mac OS X和Alpine Linux上进行测试),此方法就可以工作(注意:这是对我之前删除的注释的更正)
–马特·布朗(Matt Browne)
19-10-24在19:19
#5 楼
我使用tuomaz的技术,但稍作修改:mv file1 file2 file3 -t DESTINATION
我发现此方法更容易记住,更难理解,因为它使用与香草mv操作相同的顺序:
mv file1 DESTINATION
评论
mv的手册页没有提到-t选项。
–本体
16-10-24在3:25
linux.die.net/man/1/mv是的
–geoyws
17年2月20日在4:00
#6 楼
如果文件位于同一目录中,则可以使用mv /path/to/source/dir/{file1,file2,*.ext1,*.ext2} /path/to/destination/
(在Ubuntu 16.04中测试)
评论
这实际上并没有为现有答案添加任何内容,您认为吗?
–甜点
17年12月1日在9:46
只是消除了为每个文件指定目录的完整路径的需要
–斯鲁利
17年12月1日在11:22
#7 楼
使用以下命令:mv `ls|grep IDENTIFIER` /path/to/dest/folder
但是,不建议将ls用于这种用途。请改用find命令。
评论
不建议将ls用于这种用途。如果要列出文件,尤其是后面带有grep的文件,请使用find。 -名称\ * IDENTIFIER \ *。
– NorTicUs
2012年11月8日13:48
这个答案只是为了演示如何在mv中使用上一个命令的输出。正如在问题中提到ls | grep一样,我只是复制了它。
–点燃
2012年11月8日13:50
如@NorTicUs所述,不建议使用ls。另外,带空格的文件可能会引起问题。
–帕迪·兰道(Paddy Landau)
2012年11月13日14:27
不要解析ls
–詹娜♦
17年7月7日在15:15
#8 楼
如果要移动的文件太多,则实际上mv
命令(或其他命令,例如rm
)可能有太多文件。我建议使用xargs
以类似循环的方式分别移动每个文件。解决该问题的一种方法是:ls -1 | grep IDENTIFIER | xargs -i mv {} /path/to/dest/folder/
ls -1
(减一)可确保每行只有一个文件名。如果您对ls
命令具有隐藏的别名,则可以在一行上包含多个文件名,并且无意间移动了您不想移动的文件。 评论
当您的IDENTIFIER难以转换为通配符,或者您想将grep与更复杂的正则表达式一起使用时,这也很有用。
– AggieBill
2012年11月14日上午10:11
+1代表xargs。 find几乎总是比ls更安全。找 。标识符-exec mv {} / path / to / dest / folder \; (未测试的代码)。用于当前工作目录。 \;是结束要执行的命令。根据您的操作,您可能必须添加-maxdepth 1以防止其递归到子目录中。
–乔
2012年11月14日23:33
在Mac OS上获取非法选项-i
–詹姆斯·坎贝尔
20-09-28在14:38
#9 楼
您可以使用ls的输出输入到mv commnadmv $(ls | grep IDENTIFIER) /path/to/dest/dir
$()
之间的命令返回与您的搜索匹配的文件名列表,可以将其提供为mv命令的参数。评论
不要解析ls
–詹娜♦
17年7月7日在15:14
工作很好,谢谢
–詹姆斯·坎贝尔
20-09-28在14:42
#10 楼
find -type f -name "[range]" -exec mv {} target-directory ';'
此命令会将具有任何模式/范围的文件名移动到目标目录。
例如
find -type f -name "file[1-50000]" -exec mv {} target-directory ';'
它将名称为
file1
,file2
... file50000
之类的文件移动到target-directory
。#11 楼
最简单的方法是这样mv {file1,file2,file3} DESTINATION
或目录
mv {directory1,directory2,directory3} DESTINATION
或文件和目录
mv {file1,file2,file3,directory1,directory2,directory3} DESTINATION
希望对您有所帮助
#12 楼
使用此命令可以移动多个文件。mv SourceFilenames ~DestinationPath
#13 楼
如果您使用的是fish
shell,那么大多数事情都是幸运的。如此简单,只需将目标位置键入最后一个文件即可。 mv file1 file2 file3 DESTINATION
#14 楼
您可以像这样使用find
和-exec
:find . -name "Identifier" -exec echo mv {} <destination_path> \;
评论
在Linux上工作,不确定是否在Mac上工作
–亚历山大·米尔斯(Alexander Mills)
16 Dec 10'在20:25
适用于Mac和git bash,适用于Windows的git。
–布兰特·索洛维(Brandt Soloviy)
17年2月23日在12:55
在Mac(10.11.16 El Capitan)上无法使用。但是您只需将目标文件夹放在后面,即mv file1 file2 ... destination
–乔纳森·H
17年7月23日在15:29
-1为第二种方法,因为它将落入包含换行符的文件中
–αғsнιη
17年7月7日在15:33
为什么不应该解析ls的输出。
–甜点
17年12月1日在9:42