我有以下文件和目录配置:
-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
您可以组合find
和xargs
:rm
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
(删除)/ (删除目录)的命令来查找“上游”,即来自命令的目录。rmdir
file
如果目录不为空,则替换rmdir
为rm -Rf
,但这将递归删除命令找到的目录中的所有文件find
。
组合-print0
/-0
将确保所有文件/目录都得到正确处理,即使名称中带有空格(这里可能不需要,但在一般情况下最好使用)。
确保对非重要数据进行测试并始终进行备份。
答案3
shopt -s globstar
echo **/*delme* | xargs rm