prune 的用法在 find 命令中不起作用

prune 的用法在 find 命令中不起作用

我正在尝试使用修剪作为:

find /opt/app/bss/sieb/fs_clone1/userpref -name "*" -type f -mtime -7 -prune

这仍然是在搜索子目录。

答案1

它仍在搜索子目录,因为您没有-prun搜索任何子目录。

对于-prunefind棵树,你必须首先匹配它。

find / -type d ! -path / -prune -print

/boot
/home
/mnt
/opt
/esp
/dev
/proc
/root
/run
/srv
/sys
/tmp
/usr
/var
/etc

我必须使用,-path /因为否则找到的第一个目录将是/根目录并且-prune然后是-print编辑。

但正如你所看到的,它是匹配的d文件-prune,仅此而已。所以如果你匹配 -type f-prune根本不会有任何树 - 常规文件没有子目录。

你可能想要这样的东西:

find /opt/app/bss/sieb/fs_clone1/userpref \
     -path \*path/to/ignore -prune -o     \
   ! -type d -mtime -7

这与你的说法有很大不同。首先-path path/to/ignore是行不通的。它必须匹配一个所有的路径,并且您的起始树以/path/to/ignore根本不是。所以我把*globstar 放进去,但更好 - 也许更简洁可能是:

cd /opt/app/bss/sieb/fs_clone1/userpref &&
find . -path ./path/to/ignore -prune -o  \
     ! -type d -mtime 7

...这会让你的输出不那么混乱。但无论哪种方式,与该模式匹配的所有路径-path都将被-prune'd不是打印是因为我们-o转到了另一个语句,并且它只是find自动打印的整个脚本的最后一个表达式。

不过,最后一部分也有所不同。我放弃了,-name '*'因为所有的名字都匹配'*',所以你最好不要过滤它。我发现这! -type d就是很多人所说的意思-type f。前者匹配任何非目录的文件类型 - 包括 fifos 和套接字以及其他奇怪的文件类型。后者仅匹配常规文件。也许你确实想要后者——但我只是想提一下。

无论如何,当一切都说完并完成后,*path/to/ignore就会匹配、修剪和不打印其他所有内容,这些文件不是目录类型并且是 7 天前修改的。

答案2

find /opt/app/bss/sieb/fs_clone1/userpref -type f -mtime -7 -path path/to/ignore -prune -o -print

但我认为你需要的是-depth

请注意,这−maxdepth 0意味着仅将测试和操作应用于命令行参数。−mindepth 1表示处理除命令行参数之外的所有文件。

相关内容