FIND 命令修剪目录时遇到问题

FIND 命令修剪目录时遇到问题

我不确定我在这方面做错了什么。我已经阅读了很多帖子和网站,但仍然遇到问题。

我需要检查系统中是否有过去一天更改的文件,但我需要跳过某些已安装的文件夹,因为它们安装到具有大量 TB 的驱动器上。

设置如下:我有几个驱动器安装到 /usr/local/connect/ 内的文件夹 /usr/local/connect/logs --> 安装到 NFS /usr/local/connect/DR01 --> 安装到DR 还分享了一些这样的...

我想运行排除这些目录的普通查找命令(或任何适用于此目的的命令)。以下是我尝试过但似乎不起作用的方法。

寻找 。 ! -path“/usr/local/connect/”-type f-name“*.txt”-mtime -1

寻找 。 -type f -path“/usr/local/connect/”-prune -o -name“*.txt”-mtime -1

这些似乎都不起作用。我也尝试过以不同的顺序执行此操作(例如首先 -type f 或首先修剪,等等)。但我读到修剪删除了前进的路径。这看起来应该是一件很容易做到的事情。如果您看到我的错误,请告诉我!提前致谢!

答案1

-path "/usr/local/connect/"仅在完全匹配的文件路径上匹配/usr/local/connect/。这永远不会匹配,因为find .所有路径都将以.

所以你会想要:

find / -path '/usr/local/connect/*' -type d -prune -o \
       -name '*.txt' -type f -mtime -1 -print

-print也很重要。如果没有它,就会有一个隐式的-printfor 文件匹配整个表达式(因此 的两个部分-o)。

请注意,您还可以使用它-xdev来防止跨越任何文件系统边界。

如果您想find .在当前目录为 时运行它/usr/local,则必须是:

cd /usr/local &&
  find . -path './connect/*' -type d -prune -o \
         -name '*.txt' -type f -mtime -1 -print

相关内容