如何递归删除目录中的所有内容,除了要保留的一小部分文件之外?例如,让我们尝试删除除名为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 '{}' +
,但更短,甚至更高效。不过,请先在没有它的情况下运行它,以确认它只获取您真正想要删除的文件。