shell 如何合并多个级别上的所有目录?

3zwjbxry  于 2023-05-29  发布在  Shell
关注(0)|答案(2)|浏览(135)

我在Mac OS 10.14.6上,有一个目录,每个目录包含多个级别的子目录。
例如

使用终端,我想把它们都合并到一个目录(所以我只剩下文件,但没有文件夹)。我想一个单一的命令,可以在多个不同的目录(无论名称)。因此,该命令不能指定目录名。
我该怎么做?

我尝试过的步骤

在谷歌上搜索一下,听起来mv命令很完美。所以我试了这个:

mv */*

然而,这只是向下合并一层。例如:

我怎么能让它通过所有的水平。另外,是否有办法选择自动删除空目录?(可选地,我的意思是我可以省略命令的这一部分,当我不删除空目录时,所以空目录仍然存在)。

blpfk2vs

blpfk2vs1#

使用find,如

find . -type f -exec sh -c 'mv "$@" .' sh {} +

要删除剩余的目录,请使用

find . -depth -type d -exec rmdir {} +
vfhzx4xs

vfhzx4xs2#

find /path/to/root/directory -type f -exec mv {} /path/to/destination/folder/ \;
  • find:用于搜索指定位置中的文件和目录的命令。
  • /path/to/root/directory:将其替换为子目录所在的根目录的实际路径。
  • -type f:指定我们正在查找常规文件(而不是目录)。
  • -exec mv {} /path/to/destination/folder/ \;:对每个找到的文件({})执行mv命令。它将每个文件移动(mv)到指定的目标文件夹(/path/to/destination/folder/)。

相关问题