我有一个 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 或类似的)使用感叹号表示特殊命令。