Find 命令排除路径与特定模式匹配的文件

Find 命令排除路径与特定模式匹配的文件

我有一个 find 命令,用于查找最近修改的文件并输出日期

find /path/on/server -mtime -1 -name '*.js' -exec ls -l {} \;

我希望它排除任何符合特定模式的深层嵌套文件夹,例如,有许多文件夹包含“statistics”目录和“.svn”目录。因此,我希望能够说如果昨天修改的文件位于名为 statistics 的文件夹中,则忽略它。或者根本不搜索这些文件夹中的文件。

答案1

您可以使用-path-prune命令行参数来执行此操作

find /path/on/server -mtime -1 -o -path '*.svn' -prune -o -path '*statistics' \ 
-prune -o -exec ls -l {} \;

这样做的好处是不需要搜索您想要排除的目录。

还要注意,您ls -l可能没有按照预期去做,因为它会列出传递给它的目录的全部内容,所以您会多次列出一些文件。

从评论来看ls -ld会更好。

答案2

使用否定修饰符!。例如像这样find /path/on/server -mtime -1 -name '*.js' -o -name '!.svn' -o -name '!statistics' -exec ls -l {} \;

这里的线索是-o(意味着简单的 OR)并且'感叹号周围的是 ,因为 shell(bash 或类似的)使用感叹号表示特殊命令。

相关内容