递归删除子目录和文件

递归删除子目录和文件

我有以下文件和目录配置:

-Parent_dir
    |-delme_dir
    |-delme_file
    |-aFile
    |-sub_dir
        |-delme_dir
        |-delme_file
        |-aFile
        |-sub_dir
            |-delme_dir
            |-delme_file
            |-aFile
    |-sub_dir2
        |-delme_dir
        |-delme_file
        |-aFile

有没有我可以使用父目录递归地删除所有delme_dir 目录delme_file 文件

答案1

您可以在单个命令中执行以下操作:

find . \( -type d -name "delme_dir" -o -type f -name "delme_file" \) -delete

如果没有其他目录或文件与模式匹配delme_*,您可以简单地执行此操作。

find . -name "delme_*" -delete

答案2

您可以组合findxargsrm

find . -type f -a -name delme_files -print0 | xargs -0 rm

find . -type d -a -name delme_dir -print0 | xargs -0 rmdir

(当您在Parent_dir目录中时)

可能有办法将两者合二为一,find但无论如何我发现这样更清晰。

这些find命令将找到根据您的示例命名的目录/文件,然后将结果传输到将在每个文件上xargs执行rm(删除)/ (删除目录)的命令来查找“上游”,即来自命令的目录。rmdirfile

如果目录不为空,则替换rmdirrm -Rf,但这将递归删除命令找到的目录中的所有文件find

组合-print0/-0将确保所有文件/目录都得到正确处理,即使名称中带有空格(这里可能不需要,但在一般情况下最好使用)。

确保对非重要数据进行测试并始终进行备份。

答案3

shopt -s globstar
echo **/*delme* | xargs rm

相关内容