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

Chr*_*ris 56 linux file-management file-transfer ubuntu

如何将文件而不是目录移动到另一个文件夹/父文件夹中?

我有一个非常难看的文件夹结构,一些 .mp3 文件在子文件夹中深埋了 6 层。

我想使用 Ubuntu 将所有文件(主要是 .mp3 但不是全部)放在一个目录中,根本没有子目录。

帮助?

Chr*_*ian 67

askubuntu-QA 中有一个很好的答案。

为此,请打开终端并执行以下命令:

mv  -v ~/Downloads/* ~/Videos/
Run Code Online (Sandbox Code Playgroud)

它将所有文件和文件夹从下载文件夹移动到视频文件夹。


移动所有文件,但不移动文件夹:

但是,如果您有兴趣将所有文件(但不是文件夹)从 Downloads 文件夹移动到 Videos 文件夹,请使用此命令

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos
Run Code Online (Sandbox Code Playgroud)

仅移动下载文件夹中的文件,而不移动子文件夹中的文件:

如果要移动 Downloads 文件夹中的所有文件,但不移动 Download 文件夹中文件夹中的任何文件,请使用以下命令:

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos
Run Code Online (Sandbox Code Playgroud)

在这里,-maxdepth选项指定了 find 应该尝试的深度, 1意味着,只有在 find 命令中指定的目录。您可以尝试使用2,3也进行测试。

有关详细说明,请参阅 Ubuntu find 联机帮助页

来源

  • 如果我想要做的是将所有文件复制到该文件夹​​中,我只需将 mv 更改为 cp 吗?我是 Linux 新手 (2认同)

pab*_*ouk 19

解决方案

find /src/dir -type f -exec mv --backup=numbered -t /dst/dir {} +
Run Code Online (Sandbox Code Playgroud)

该命令将查找/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 和 The Single UNIX Specification 标准的一部分。因此它应该更便携。请参阅IEEE Std 1003.1, 2004 EditionIEEE Std 1003.1, 2013 Edition0000243: Add -print0 to "find"。但无论如何,所需的-t开关mv是 GNU 扩展,因此整个命令在 POSIX 系统之间不可移植。

注:在这种情况下find将能够生产开始的路径-(我不知道任何这样的实现的find的时刻。)在{}应该结束选项指示前面:--


小智 7

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


X-F*_*ile 5

我的一句台词 - 这适用于 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
Run Code Online (Sandbox Code Playgroud)

第一部分将所有子文件夹中的所有内容移动到您启动命令的实际文件夹中;第二部分检查子目录是否为空(现在应该:-)并删除它们,这样你就可以在没有子目录的情况下获得所有内容。