如何递归删除除文件列表之外的所有内容?

如何递归删除除文件列表之外的所有内容?

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

相关内容