我想在某个文件夹中查找具有特定扩展名的文件,比如说查找“.sql“ 在 ”/备份-nfs“。稍后我将在crontab上使用此命令来自动删除一些文件。
我使用了 3 种不同的方法,它们给出了不同的结果:
方法 1:
- 以用户身份登录。
- 去/备份-nfs
- 输入
ls -lah
- 结果是14个文件。当然,这是正确的。
方法 2:
- 以用户身份登录。
- 去/备份-nfs
- 输入 :
find . /backup-nfs/ -name "*.sql" -type f -ls
- 结果是 14 个文件(其中 7 个是重复的,因此实际上只生成了 7 个文件)。例如:文件 A,文件 B,... 文件 G,/backup-nfs/文件 A,/backup-nfs/文件 B,... /backup-nfs/文件 G
方法3:
- 以用户身份登录
- 进入该用户的根目录
- 输入 :
find . /backup-nfs/ -name "*.sql" -type f -ls
- 结果是文件太多。它搜索整个目录,而不仅仅是 /backup-nfs !
问题:
- 为什么方法 2 只生成了 7 个不同的文件?还有 7 个文件(大小为 0KB)被忽略了。
- 为什么方法 3 搜索/备份-nfs以及整个目录“/backup-nfs” 之外即使我已经指定仅搜索“
/backup-nfs
”? - 正确的方法是什么?我不想删除其他不符合条件的文件。
我在 Ubuntu 12.04(服务器)和 20.04(非服务器)上尝试过
答案1
问题是 :
find . /backup-nfs/
.
您要求在(当前目录) 和 中搜索/backup-nfs
。如果您只想在 中搜索/backup-nfs
,只需说出来,无需添加当前目录。
find /backup-nfs
答案:
- 不知道。你可能看起来不对劲。
- 因为您明确要求搜索当前目录(
.
),而该目录恰好是用户的主目录/backup-nfs
。 find /backup-nfs -iname "*.sql" -print0 | xargs -0 rm
或者像@terdon 在评论中所建议的那样,-delete
直接使用操作
find /backup-nfs -iname "*.sql" -delete
还请注意,您声称这ls - lah
给出了正确的结果,这意味着您有一个名为的文件夹和文件夹中-
名为的文件夹,它们共同包含 14 个名为“*sql”的文件。我对此表示严重怀疑。lah
/backup-nfs