如何将文件从嵌套子目录移到 ubuntu 中的另一个文件夹?(尝试删除许多子文件夹)

如何将文件从嵌套子目录移到 ubuntu 中的另一个文件夹?(尝试删除许多子文件夹)

我如何搬家文件而不是将目录放入另一个文件夹/父文件夹?

我的文件夹结构非常丑陋,其中一些 .mp3 文件埋在 6 层深的子文件夹中。

我希望使用 Ubuntu 将所有文件(大部分是 .mp3,但不是全部)放在一个目录中,没有任何子目录。

帮助?

答案1

有一个很好的答案在 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选项指定 find 应尝试的深度, 1即仅查找 find 命令中指定的目录。您可以尝试使用23也可以进行测试。

查看 Ubuntu查找手册页以获得详细解释。

来源

答案2

解决方案

find /src/dir -type f -exec mv --backup=numbered -t /dst/dir {} +

该命令将查找 下的所有常规文件/src/dir(包括所有子目录),并/dst/dir使用 命令将它们移动到mv。只需将目录替换为您的目录即可。同名文件将自动重命名。

选择要移动的文件

如果只想移动 MP3 文件,请在命令后添加-iname "*.mp3"选项。find-type f

与 c0dev 的回复比较

c0dev 的回复中只有第二个命令回答了这个问题。下面是它与此回复的比较。第 3 点和第 4 点可以在其他回复中以与此处相同的方式解决。

  1. 除了mv解决方案-exec +不需要调用额外的命令(如xargs或)parallel并两次交出文件名之外。
  2. 另一个回复将默默覆盖具有相同名称的文件。在这里,文件将通过选项自动重命名--backup=numbered。不幸的是,这些带有后缀的备份~3~将默认隐藏在大多数文件管理器中。不幸的是,mv不允许更改后缀,但可以通过其他命令轻松地进行后处理。这是一个 GNU 扩展。
  3. 相反,它-print0 -exec command {} +是 IEEE Std 1003.1 (POSIX)、ISO/IEC 9945 和单一 UNIX 规范标准的一部分。因此它应该更具可移植性。请参阅IEEE 标准 1003.1,2004 年版IEEE 标准 1003.1,2013 年版0000243:将 -print0 添加到“查找”。但无论如何,所需的-t开关mv是 GNU 扩展,因此整个命令不能在 POSIX 系统之间移植。

注意:在这种情况下,find能够生成以 开头的路径(我目前-不知道有任何这样的实现。)应该在选项结束指示符之前:。find{}--

答案3

打开终端,cd 到包含文件的文件夹并运行find . -mindepth 2 -type f -print -exec mv {} . \; 以将这些子目录中的所有文件移动到当前目录中。

答案4

不幸的是,我的声誉不够高,无法对标记的解决方案发表评论。但是,我想提醒其他人注意我遇到的一个问题。这很业余;但是,当你做几件事时,它可能一开始就不会出现在你的脑海中。希望它能帮助其他人。

问题

启动命令后,提供了以下消息的变体。然后,该命令创建多个文件。

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我希望它们最终所在的目录中。

相关内容