尖端:

尖端:

我的硬盘驱动器包含大约 300,000 x 3 个由恢复程序写入的文件。

其中一些文件的格式如下:

.doc.apple.quarantine

这些很容易删除:

find . -type f -name '*.apple.quarantine' -delete

但其他人则更困难,因为他们有这句话

_AFP_Afpinfo可能是在文件扩展名之后写入的,例如

happybirthday.mp3._AFP_afpinfo 

要不就

happybirthday_AFP_Afpinfo

我想删除第三种类型的文件,即:

happybirthday_AFP_Afpinfo  

所以我的问题是这个 Unix 命令是否会删除所有包含这些字符的文件AFP_Afpinfo

find . -type -f 'AFP_Afpinfo' -delete

我测试过

-find . -type -f -name 'epub' -print

并且没有显示任何文件。

我试过

-find -type -f -name 'epub' -print

和显示的文件。因此,after 的使用find是不正确的。

运行 1/2 小时左右后,运行:

find -type f -name '_AFP_Afpinfo' 

显示以下错误:

find: './.Trash-1000/files': Input/output error

我检查了该目录,里面充满了AFP_Afpinfo文件。

答案1

find . -type -f 'AFP_Afpinfo' -delete不正确,甚至无效 - 需要在或AFP_Afpinfo之前,然后匹配整个名称完全匹配的文件(在 的情况下不区分大小写)。-name-inameAFP_Afpinfo-iname

如果您想查找名称以句点结尾_AFP_Afpinfo但前面没有句点的文件,您可以这样做

find -type f -name '*[^.]_AFP_Afpinfo'

其中表示除或使用之外的[^.]任何字符.

find -type f \( -name '*_AFP_Afpinfo' ! -name '*._AFP_Afpinfo' \)

它们并不完全等价 - 后一个表达式会匹配,_AFP_Afpinfo而前者需要在字符串之前至少有一个非句点字符。

无论哪种情况,我强烈地建议使用-printfirst 代替进行测试-delete

答案2

不它不是。

尖端:

测试一下

尝试用 with-print代替-delete

.文件名并不特殊

并不.特殊:它只是一个普通字符。在 DOS 和 CP/M 中它很特殊,但你没有使用它们。在 MS-Windows CMD 中以结尾的 glob.*是特殊的:

  • n.*n
  • 也是n.*.*如此n.*,并且也是*.*.*如此*.*
  • 这一切都来自 CP/M / DOS 遗产,这*.*意味着所有文件(所有文件.中都有一个 .
  • 这种文化仍然存在,并且很多人认为它.在 Unix 上很特别。它不是,它只是一个字符(除非它是文件名的第一个字符)。

相关内容