如何删除所有子目录但保留父目录中的文件?

3
我正在使用AIX上的ksh,我的目录结构如下所示。
dir/
    subdir1/file1
    subdir2/file2
    subdir3/file3

我想要删除所有的子目录subdir1subdir2等等,并让dir中的file1file2等文件保持不变。换句话说,我想要将subdirs中的所有文件移动到dir,然后删除所有空的subdirs。最终结果应该是:
dir/
    file1
    file2
    file3
    ....

我该使用什么命令?

2个回答

3

我建议您使用find命令,它适用于任何shell:

find ./dir -mindepth 2 -type f -exec mv {} ./dir/ \;

这个命令从 ./dir 开始查找一级子目录下的文件,然后将这些文件移动到 ./dir

要删除空的子目录,请使用以下命令:

find ./dir -mindepth 1 -type d -empty -delete

警告:如果文件名冲突,这将覆盖同名文件。


2

首先将文件上移,然后删除空的子目录;从 dir/ 目录开始:

mv subdir*/file* ./ && rmdir subdir*/

/后面的目录名称表示我们正在处理一个目录。你可以使用?[:digit:]来更精确地匹配文件/目录名称。


1
也许使用 rmdirrm -r 更好,因为 OP 所想要的是仅删除空目录。所以,可以使用 mv subdir*/file* ./ && rmdir subdir*/ - codeforester
1
@codeforester 嗯,我没仔细读……现在有意义了,修改了。谢谢。 - heemayl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接