Answers:
在askubuntu-QA中有一个很好的答案。
为此,请打开一个终端并执行以下命令:
mv -v ~/Downloads/* ~/Videos/
它将所有文件和文件夹从“下载”文件夹移动到“视频”文件夹。
要移动所有文件,但不移动文件夹:
但是,如果您有兴趣将所有文件(而非文件夹)从“下载”文件夹移动到“视频”文件夹,请使用此命令
find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos
要仅移动“下载”文件夹中的文件,而不移动子文件夹中的文件,请执行以下操作:
如果要移动“下载”文件夹中的所有文件,而不是“下载”文件夹中文件夹中的任何文件,请使用以下命令:
find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos
在这里,
-maxdepth
option指定了find应该尝试的深度,1
即仅find命令中指定的目录。您可以尝试使用2
,3
也可以进行测试。有关详细说明,请参见Ubuntu 查找手册页。
find /src/dir -type f -exec mv --backup=numbered -t /dst/dir {} +
该命令会发现在所有的常规文件/src/dir
(包括所有子目录),并将其移动到/dst/dir
通过使用该命令mv
。只需将目录替换为您的目录即可。具有相同名称的文件将自动重命名。
如果只想移动MP3文件,请-iname "*.mp3"
在find
后面的命令中添加选项-type f
。
只有c0dev答复中的第二条命令才能回答该问题。下面是它与该回复的比较。点3和点4可以在其他答复中以与此处相同的方式解决。
mv
的解决方案外,-exec +
无需调用其他命令(例如xargs
或)parallel
并将文件名移交两次。--backup=numbered
。不幸的是~3~
,默认情况下,这些带有后缀的备份将隐藏在大多数文件管理中。不幸的是mv
,不允许更改后缀,但是可以通过附加命令轻松对其进行后处理。这是一个GNU扩展。-print0
-exec command {} +
是IEEE Std 1003.1(POSIX),ISO / IEC 9945和Single UNIX规范标准的一部分。因此,它应该更便携。参见IEEE Std 1003.1,2004 Edition,IEEE Std 1003.1,2013 Edition和0000243:将-print0添加到“ find”。但是无论如何,必需的-t
开关mv
是GNU扩展,因此整个命令不能在POSIX系统之间移植。注意:如果find
能够生成以-
(我目前不知道这种实现方式find
)开头的路径,{}
则应在选项结束指示符之前加上--
。
{}
必须作为最后一个论点。已更正。
不幸的是,我没有足够高的声誉来评论标记的解决方案。但是,我想提醒其他人我遇到的问题。这是相当业余的;但是,当您做几件事时,一开始可能不会想到。希望它将对其他人有所帮助。
启动命令后,提供了以下消息的变体。然后,该命令将创建多个文件。
mv: `/data/share/docs/src/dir/filename.ext' and `/data/share/docs/src/dst/filename.ext' are the same file
的/src
是的父/dst
(例如/src/../dst/
)。
虽然可能有更好的解决方案,但我只是将文件移到我外部的临时目录中/src
,然后重新运行命令以将它们放回/src/../dst
我希望它们最终位于的目录中。
我的一线工具-在Mac上可以使用,但在任何* nix上也可以使用。从父目录开始。
# Move files to parent and delete empty folders
find . -not -type d -print0 | xargs -0J % mv -f % . ; find . -type d -depth -print0 | xargs -0 rm -rf
第一部分将所有子文件夹中的所有内容移动到启动命令的实际文件夹;第二部分检查子目录是否为空(它们现在应为:-)并删除它们,以便在此处获得所有内容而没有子目录。