我已经目录中称为test其在日期范围状的子文件夹01,02...... 31.此所有子文件夹中都包含.bz2文件.我需要使用find命令搜索扩展名为.bz2的所有文件,但不包括特定范围的目录.我知道find . -name ".bz2" -not -path "./01/*",但-not -path "./01/*"如果我想跳过10个目录,写作会非常可怜.那么我如何01..19在find命令中跳过子目录呢?
首先,您可以find通过使用-prune而不是-not -path-来提供帮助,这甚至可以避免查看相关目录。
对于您的主要观点 - 您可以为您的示例构建一个通配符(数字 01 到 19):
find . -path './0[1-9]' -prune -o -path './1[0-9]' -prune -o -print
Run Code Online (Sandbox Code Playgroud)
如果您的范围不太方便(例如 05 到 25),您可能希望将范围构建到 bash 变量中,然后将其插入到find命令中:
a=("-path ./"{05..25}" -prune -o")
find . ${a[*]} -print -prune
Run Code Online (Sandbox Code Playgroud)
(你可能想要echo "${a[*]}"或printf '%s\n' ${a[*]}想看看它是如何工作的)
您可以在模式中使用通配符作为选项-not -path:
find ./ -type f -name "*.bz2" -not -path "./0*/*" -not -path "./1*/*
Run Code Online (Sandbox Code Playgroud)
这将排除所有以0或1开头的目录.甚至更好:
find ./ -type f -name "*.bz2" -not -path "./[01]*/*"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6559 次 |
| 最近记录: |