2014-01-07 37 views
1

這裏有一個例子:如何使用「查找」修剪一些目錄,同時保留一些子目錄

#tree 
. 
├── dir1 
│ ├── file1 
│ ├── subdir1 
│ │ └── file11 
│ ├── subdir2 
│ │ └── file12 
│ ├── subdir3 
│ ├── subdir4 
│ ├── subdir5 
│ └── subdir6 
├── dir2 
├── dir3 
│ └── dir1 
│  └── file11 
├── dir4 
├── dir5 
└── dir6 

下面的命令找出所有文件,除了那些dir1dir2下。

find -not \(-path './dir1' -prune -o -path './dir2' -prune \) 

我的問題是如何找到的所有文件,除了dir1dir2同時還搜索到子目錄:./dir/subdir1

我試過一些這樣的,但不起作用。我不知道什麼是合併邏輯表達式的正確方法。

find -not \(\ 
    \(-path './dir1' -a -not -path './dir1/subdir1' \) -prune -o \ 
    -path './dir2' -prune \) 

忘了提,我只是想知道如何使用邏輯組合在命令find-o-a-not等,以實現這一目標。使用濾鏡(grepsed,awk)輸出find後的作品,但超出了我的問題。感謝大家發佈了他們的答案。


除外輸出:

. 
./dir6 
./dir5 
./dir4 
./dir3 
./dir3/dir1 
./dir3/dir1/file11 
./dir1/subdir1 
./dir1/subdir1/file11 

回答

0

試試這個:

find . -type f |sed '/.\/dir[12]\/[^/]*$/d' 
0
>tree 
. 
├── dir1 
│   ├── file1 
│   ├── subdir1 
│   │   └── file11 
│   ├── subdir2 
│   │   └── file12 
│   ├── subdir3 
│   ├── subdir4 
│   ├── subdir5 
│   └── subdir6 
├── dir2 
├── dir3 
│   └── dir1 
│    └── file11 
├── dir4 
├── dir5 
└── dir6 

13 directories, 4 files 

>find | awk ' 
    { 
    if($1 !~ /^\.\/dir1$/ && $1 !~ /^\.\/dir2$/) { 
     if ($1 ~ /^\.\/dir1\//) { 
     if ($1 ~ /^\.\/dir1\/subdir1(\/|$)/) { 
      print($1) 
     } 
     } else if ($1 !~ /\.\/dir2\//) { 
     print($1) 
     } 
    } 
    } ' 
. 
./dir6 
./dir5 
./dir4 
./dir3 
./dir3/dir1 
./dir3/dir1/file11 
./dir1/subdir1 
./dir1/subdir1/file11 
+0

感謝您的回答。但是應該排除'./dir1/subdir [2345]'。 – LaputaPrince

+0

@LaputaPrince我更新我的答案使用awk。試試:)。 – atupal

+0

@LaputaPrince你解決了這個問題嗎? :) – atupal

2

也許你可以試試:

find . \(-not -path './dir1/*' -and -not -path './dir2/*' -or -path './dir1/subdir1/*' \) -type f 

編輯:

考慮修剪,我認爲你應該使用:

find . \(-path './dir1/*' -and -not -path './dir1/subdir1*' -or -path './dir2' \) -prune -or -type f -print 
+0

只需找到一種方法來保持修剪的命令,這應該是更快,因爲它不會下降到'dir2'。嘗試:'find ./ -not \(\(-path'./dir1*'-and -not -path'./dir1/subdir1*'\)-o -path'./dir2'-prune \)' – LaputaPrince

0

人發現

-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 
相關問題