如何将所有子目录移动到当前目录?

如何将所有子目录移动到当前目录?

我是 Shell 脚本编程的新手。假设我们有一个如下的文件层次结构:

/A/B/C/D
/A/B/E/F/G
/A/H/I
/A/H/J/K

请注意,这里我们不仅有/A/B/..,还有/A/H/...。所有字母都是目录。我们想将层次结构转换为:

/A/B/C
/A/B/D
/A/B/E
/A/B/F
/A/B/G
/A/H/I
/A/H/J
/A/H/K

也就是说,将所有深度大于 2 的目录(目录 A 的深度为零)移动到深度 2。我可以使用 JAVA 和 C 来实现它,但它们有点太慢了。有人知道如何使用 shell 脚本来实现它吗?

伪代码如下:

for each directory D in current directory A // A may have more than one subdirectories
    for each directory d in D
        for each object in d
            if object is a directory
                move object and all descendant subdirectories of object to /A/D;
            end if
        end for
    end for
end for

答案1

for dir in /A/*; do
    find "$dir" -mindepth 2 -depth -type d -exec mv -t "$dir" -- {} +
done

这指示以深度优先 ( )find方式搜索-type d至少 2 级以下 ( -mindepth 2)的所有目录 ( )。对于找到的每个对象,它都会运行。与往常一样,不允许您将源目录合并到现有目标目录中(但有办法解决这个问题)。$dir-depthmv -t "$dir" -- <SRC>mv

相关内容