![如何递归删除除文件列表之外的所有内容?](https://linux22.com/image/78731/%E5%A6%82%E4%BD%95%E9%80%92%E5%BD%92%E5%88%A0%E9%99%A4%E9%99%A4%E6%96%87%E4%BB%B6%E5%88%97%E8%A1%A8%E4%B9%8B%E5%A4%96%E7%9A%84%E6%89%80%E6%9C%89%E5%86%85%E5%AE%B9%EF%BC%9F.png)
如何递归删除目录中的所有内容,除了要保留的一小部分文件之外?例如,让我们尝试删除除名为f2
和 的文件之外的所有文件f5
。
# Create a testing ground
mkdir -p d{1..3}
touch d{1..3}/f{1..5}
# Remove all files EXCEPT ones named f2 and f5.
find . -type f -not -name ('f2'|'f5') -type f -exec rm -f '{}' +
# Remove empty directories
find . -type d -empty -delete
生产:
bash: syntax error near unexpected token `('
最终目标是从更大的 C 用户空间应用程序中执行此操作,但使用system()
命令行命令似乎更容易。
答案1
find . -type f -not \( -name f2 -o -name f5 \) -delete
应该这样做。
-delete
就像一样-exec rm -f '{}' +
,但更短,甚至更高效。不过,请先在没有它的情况下运行它,以确认它只获取您真正想要删除的文件。