如何查找具有特定名称的所有子目录并删除其内容(而不是删除目录本身)

时间:2018-07-30 21:07:26

标签: linux

我似乎找不到在似乎提出类似问题的几篇文章中都可以使用的解决方案。这是我用来测试文件夹的最接近的命令:

find . -iname "*Adobe Premiere Pro Video Previews*" -exec sh -c 'rm -rf {}/*' \;

问题是find . -iname "*Adobe Premiere Pro Video Previews*"本身会找到子目录并打印它们,而-exec sh -c 'rm -rf {}/*' \;会执行仅删除内容而不删除目录本身的工作。但是它们不能用于查找目录并在放在一起时删除其内容。我应该使用什么命令来同时完成这两项任务?

谢谢

3 个答案:

答案 0 :(得分:0)

#!/bin/bash
while read -r line; do
    echo "Deleting CONTENTS of folder: $line"
    rm -rf "$line/*"
done <<< $(find . -type d -iname "*Adobe Premiere Pro Video Previews*")

这会遍历find的结果(使用-type d仅显示目录,因此如果文件包含搜索字符串,您就不会遇到问题),并对每个目录的内容执行rm -rf结果。 /*很重要,因为没有它,它也会删除结果目录,而不仅仅是其内容。

答案 1 :(得分:0)

for dir in `find . -type d -iname "*Adobe Premiere Pro Video Previews*"`; do
    find $dir -type f -delete
done

答案 2 :(得分:0)

我可能不是bash方面的专家,但是对我来说,以下命令正在起作用:

find . -iname "*test*" -type d -exec sh -c "rm -rf {}/*" \;