以下命令递归删除文件夹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。
你能建议一下吗?
答案1
当你使用时,-type f
你是在find
告诉仅有的考虑文件而不是其他。所以这不会删除目录是正常的。为了避免删除/tmp/CURRENT/
自身,您可以尝试以下操作:
如果你
find
支持-mindepth
(GNUfind
——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)