UBUNTU 命令在文件夹中查找文件

pad*_*jee 0 server command-line find

我想在某个文件夹中查找具有特定扩展名的文件,比如说在“ /backup-nfs ”中查找“ .sql ” 。稍后,我将在 crontab 上使用此命令来自动删除一些文件。

我使用了 3 种不同的方法,它们给出了不同的结果:

方法一:

  • 以用户身份登录。
  • 转到/backup-nfs
  • 输入ls -lah
  • 结果是 14 个文件。当然,这是正确的。

方法二:

  • 以用户身份登录。
  • 转到/backup-nfs
  • 输入 :find . /backup-nfs/ -name "*.sql" -type f -ls
  • 结果是 14 个文件(其中 7 个是重复的,因此基本上只生成 7 个文件)。例如:文件 A、文件 B、...文件 G、/backup-nfs/文件 A、/backup-nfs/文件 B、.../backup-nfs/文件 G

方法三:

  • 以用户身份登录
  • 转到该用户的根目录
  • 输入 :find . /backup-nfs/ -name "*.sql" -type f -ls
  • 结果文件太多。它搜索整个目录,而不仅仅是 /backup-nfs !

问题:

  1. 为什么方法 2 只生成 7 个不同的文件?还有 7 个其他文件,大小为 0KB,被省略。
  2. 为什么方法 3 会搜索/backup-nfs以及“/backup-nfs”之外的整个目录,即使我已指定仅搜索“ /backup-nfs”?
  3. 正确的方法是什么?我不想删除其他不符合条件的文件。

我尝试了 Ubuntu 12.04(服务器)和 20.04(非服务器)

exo*_*ore 6

问题是 :

find . /backup-nfs/
Run Code Online (Sandbox Code Playgroud)

您要求在.(当前目录)和/backup-nfs. 如果你只想在直接说出来的地方搜索/backup-nfs,不需要添加当前目录。

find /backup-nfs
Run Code Online (Sandbox Code Playgroud)

答案:

  1. 不知道。你可能看起来不太对劲。
  2. 因为您明确要求搜索当前目录 ( .),该目录恰好是 USER 的 home 和/backup-nfs.
  3. find /backup-nfs -iname "*.sql" -print0 | xargs -0 rm
    或者正如 @terdon 在评论中建议的那样,-delete直接使用该操作
    find /backup-nfs -iname "*.sql" -delete

另请注意,您声称ls - lah给出了正确的结果,这意味着您有一个名为 的文件夹-以及lah该文件夹内的一个名为的文件夹/backup-nfs,它们共同保存了 14 个名为“*sql”的文件。我严重怀疑这一点。