tar*_*yte 4 bash find shell-script rm
如何递归删除目录中的所有内容,除了要保留的一小部分文件?例如,让我们尝试删除除名为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
Run Code Online (Sandbox Code Playgroud)
产生:
bash: syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)
最终目标是在更大的 C 用户空间应用程序中执行此操作,但system()用于执行命令行命令似乎要容易得多。
find . -type f -not \( -name f2 -o -name f5 \) -delete
Run Code Online (Sandbox Code Playgroud)
应该这样做。
-delete就像-exec rm -f '{}' +但更短,甚至更有效率。不过,先在没有它的情况下运行它,以确认它只获取您真正想要删除的文件。