我有一个查找命令,查找最近修改的文件,并输出date
find /path/on/server -mtime -1 -name '*.js' -exec ls -l {} \;
我希望它排除任何深层嵌套的文件夹匹配一个特定的模式,例如有一些“统计”目录和“.svn”目录的文件夹。 所以我想能够说,如果昨天修改的文件是在一个名为统计文件夹忽略它。 或者可能根本不search这些文件夹中的文件。
您可以使用-path和-prune命令行参数来执行此操作
find /path/on/server -mtime -1 -o -path '*.svn' -prune -o -path '*statistics' \ -prune -o -exec ls -l {} \;
这样做的好处是不要search你想排除的目录。
另外请注意,你的ls -l可能不会做你所期望的,因为它会列出传递给它的目录的全部内容,所以你会得到一些文件多次列出。
从评论ls -ld会更好。
使用否定修饰符! 。 例如像这样find /path/on/server -mtime -1 -name '*.js' -o -name '!.svn' -o -name '!statistics' -exec ls -l {} \; 。
这里的线索是-o (意思是简单的OR)和感叹号的周围,因为shell(bash或类似的)使用感叹号来表示特殊的命令。