批量删除多个父文件夹中的子文件夹

Batch removing a sub folder in several parent folders

在 linux 中,我有一组文件夹,它们都包含相同的子文件夹结构。例如

FolderA/x/y/z/file1.txt

FolderA/x/y/z/file2.txt

FolderB/x/y/z/file1.txt

FolderC/x/y/z/file1.txt

我想 运行 批处理删除其中一个子文件夹,但保留下面的所有文件和文件夹不变。例如。如果我要删除文件夹 "y":

FolderA/x/z/file1.txt

FolderA/x/z/file2.txt

FolderB/x/z/file1.txt

FolderC/x/z/file1.txt

我试过将 find 和 mv 组合在一起,但不太正确

考虑到您想删除其中一个子文件夹,但保留下面的所有文件和文件夹不变,您可以执行以下操作。这不是一个精确的解决方案,一种可能对您有用的技巧。我在电脑上做过很多次

您可以递归地将子文件夹的内容复制到其父文件夹,然后遍历父目录,最后递归删除子文件夹。

  1. 遍历子文件夹

    $ cd path/to/SubFolder

  2. 将所有内容递归复制到父文件夹

    $ cp -R * ..

  3. 遍历父文件夹

    $ cd ..

  4. 递归删除子文件夹

    $ rm -rf SubFolder/

假设你有一个文件夹y,那么,


    $ cd path/to/folder/y
    $ cp -R * ..
    $ cd ..
    $ rm -rf y/

对于 运行 批处理您可以使用 find 命令找出子文件夹的路径。

请注意,如果文件夹中有很多文件夹,此技巧会消耗大量时间和资源。但这行得通!

find . -name y -type d -exec sh -c '
  for d; do echo mv "$d"/* "$d"/..; echo rmdir "$d"; done' _ {} +

如果结果符合您的预期,请删除 echo