我的硬盘驱动器包含大约 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
-iname
AFP_Afpinfo
-iname
如果您想查找名称以句点结尾_AFP_Afpinfo
但前面没有句点的文件,您可以这样做
find -type f -name '*[^.]_AFP_Afpinfo'
其中表示除或使用之外的[^.]
任何字符.
find -type f \( -name '*_AFP_Afpinfo' ! -name '*._AFP_Afpinfo' \)
它们并不完全等价 - 后一个表达式会匹配,_AFP_Afpinfo
而前者需要在字符串之前至少有一个非句点字符。
无论哪种情况,我强烈地建议使用-print
first 代替进行测试-delete
。
答案2
不它不是。
尖端:
测试一下
尝试用 with-print
代替-delete
。
.
文件名并不特殊
并不.
特殊:它只是一个普通字符。在 DOS 和 CP/M 中它很特殊,但你没有使用它们。在 MS-Windows CMD 中以结尾的 glob.*
是特殊的:
n.*
做n
- 也是
n.*.*
如此n.*
,并且也是*.*.*
如此*.*
- 这一切都来自 CP/M / DOS 遗产,这
*.*
意味着所有文件(所有文件.
中都有一个 . - 这种文化仍然存在,并且很多人认为它
.
在 Unix 上很特别。它不是,它只是一个字符(除非它是文件名的第一个字符)。