我正在尝试使用修剪作为:
find /opt/app/bss/sieb/fs_clone1/userpref -name "*" -type f -mtime -7 -prune
这仍然是在搜索子目录。
答案1
它仍在搜索子目录,因为您没有-prun
搜索任何子目录。
对于-prune
一find
棵树,你必须首先匹配它。
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
表示处理除命令行参数之外的所有文件。