下面的命令递归地删除104.tar
文件/tmp/CURRENT
夹下的所有文件。
find /tmp/CURRENT/ -type f ! -name '104.tar' -exec rm -rf {} +
但是,它不会递归删除/tmp/CURRENT
.
如果我提供-type d
它可能会有所帮助,但我不想要单独的命令。我的要求是使用我在下面尝试过的相同命令删除文件和文件夹,但没有帮助。
find /tmp/CURRENT/ -type f -type d ! -name '104.tar' -exec rm -rf {} +
如果我根本不指定-type
选项,则该命令将删除整个/tmp/CURRENT
文件夹而不是其内容!
注意:我的操作系统是 Sun Solaris Sparc。
你能建议吗?
当你用-type f
你告诉find
至仅考虑文件而已。所以这不会删除目录是正常的。为避免删除/tmp/CURRENT/
自身,您可以尝试一些操作:
如果你的find
支持-mindepth
(GNU find
——Linux系统上的默认设置——有这个,我不知道其他find
版本可能支持它),你可以告诉它只查看至少一个级别的东西:
find /tmp/CURRENT/ ! -name '104.tar' -mindepth 1
使用第二个!
运算符将其排除:
find /tmp/CURRENT/ ! -path /tmp/CURRENT/ ! -name '104.tar'
只需使用-path
, 并查找/tmp/CURRENT
以至少一个字符开头并后跟至少一个字符的路径:
find /tmp/CURRENT/ -path '/tmp/CURRENT/?*' ! -name '104.tar'
在所有三种情况下,您都可以-exec rm -r {} +
在命令末尾添加以删除匹配项。
但是,请注意,这些命令将删除除特定文件之外的所有内容/tmp/CURRENT/104.tar
。因此,如果您在子目录中有/tmp/CURRENT/dir1/104.tar
或任何其他文件104.tar
,这些文件将被删除。如果这不是您想要的,那么请编辑您的问题以澄清。
当然,如果您只想删除/tmp/CURRENT
except 中的所有内容/tmp/CURRENT/104.tar
,则根本不需要find
。你可以在 bash 中运行它:
shopt -s extglob
rm -r /tmp/CURRENT/!(104.tar)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句