Shell 如何使用;查找“;删除一些目录,同时保留一些子目录
有一个例子:Shell 如何使用;查找“;删除一些目录,同时保留一些子目录,shell,find,Shell,Find,有一个例子: #tree . ├── dir1 │ ├── file1 │ ├── subdir1 │ │ └── file11 │ ├── subdir2 │ │ └── file12 │ ├── subdir3 │ ├── subdir4 │ ├── subdir5 │ └── subdir6 ├── dir2 ├── dir3 │ └── dir1 │ └── file11 ├── dir4 ├── dir5 └── dir6
#tree
.
├── dir1
│ ├── file1
│ ├── subdir1
│ │ └── file11
│ ├── subdir2
│ │ └── file12
│ ├── subdir3
│ ├── subdir4
│ ├── subdir5
│ └── subdir6
├── dir2
├── dir3
│ └── dir1
│ └── file11
├── dir4
├── dir5
└── dir6
以下命令查找除dir1
和dir2
下的文件以外的所有文件
find -not \( -path './dir1' -prune -o -path './dir2' -prune \)
我的问题是如何在仍搜索子目录时查找除dir1
,dir2
以外的所有文件:/dir/subdir1
我试过一些这样的,但不起作用。我不知道什么是组合逻辑表达式的正确方法
find -not \( \
\( -path './dir1' -a -not -path './dir1/subdir1' \) -prune -o \
-path './dir2' -prune \)
忘了提到我只是想知道如何使用命令
find
:-o
-a
-not
中的逻辑组合来实现这一点。在find
输出后使用过滤器(grep
,sed
,awk
)可以工作,但超出了我的问题。感谢所有人都发布了他们的答案
例外输出:
.
./dir6
./dir5
./dir4
./dir3
./dir3/dir1
./dir3/dir1/file11
./dir1/subdir1
./dir1/subdir1/file11
试试这个:
find . -type f |sed '/.\/dir[12]\/[^/]*$/d'
也许你可以试试:
find . \( -not -path './dir1/*' -and -not -path './dir2/*' -or -path './dir1/subdir1/*' \) -type f
编辑:
考虑到prune,我认为您应该使用:
find . \( -path './dir1/*' -and -not -path './dir1/subdir1*' -or -path './dir2' \) -prune -or -type f -print
人类发现
-mindepth levels
Do not apply any tests or actions at levels less than levels (a non-negative integer).-min-depth 1 means process all files except the command line arguments.
这不是考试
find dir1 -mindepth N -type f
谢谢你的回答。但是
/dir1/subdir[2345]
应该被排除。@LaputaPrince我用awk更新我的答案。试试看:)。是的,兄弟。请参阅上面@liberize的回答和我的评论。awk很棒,但超出了我的问题。无论如何谢谢你!只要找到一种方法让prune保持在命令中,这应该会更快,因为它不会下降到dir2
。尝试:find./-not\(\(-path./dir1*.-和-not-path./dir1/subdir1*.\)-o-path./dir2'-prune\)
find dir1 -mindepth N -type f