2017-04-13 137 views
1

我試圖通過grep命令發送輸出從findfile -b忽略我在正則表達式中定義的特定文件。據我所知,我認爲你不能輸出到file。 你有什麼想法,我怎麼能做到這一點,而不使用任何外部文件? 我不需要使用grep來忽略文件,但我需要使用指定的正則表達式來忽略文件和實用程序file的輸出,所以如果有另一個選項,我可以使用它。通過grep查找文件

感謝提前:)

有什麼我想:

find dir -type f -exec file -b {} \; 

這對我的作品,但不忽略任何文件

find dir -type f -exec grep -v 'file.' {} \; -exec file -b {} \; 

當先例子,但是版畫出文件的內容,我不需要

編輯:我需要忽略文件名和pa部份,不輸出file

EDIT2:這是我的文件夾

dir 
dir/a 
dir/a/b 
dir/a/b/c 
dir/a/b/c/file 
dir/a/b/filec 
dir/a/fileb 
dir/filea 

每個文件是ASCII文本的類型,而我所需的輸出是使用這個表達式'file(a|b)'忽略命名fileafileb文件,但沒有不適合在正則表達式命名filefilec文件,所以從我的命令所需的輸出將

ASCII text 
ASCII text 

回答

1

如果我underdstand權,somethi吳象:

find dir -type f -exec file {} + | grep -Ev ':\s*ASCII text|empty' 

會列出哪些不是ASCII textempty文件。

如果你需要用grep文件名提前:

find dir -type f -print | grep -v 'pattern' | file -b -f - 
+0

對不起,這不是我的意思,我需要忽略的文件/路徑,而不是特定類型@ jm666 –

+0

@HynekBernard剛添加的解決方案文件的名稱。 – jm666

+0

編輯了這個問題,我不知道如何在命令的「中間」使用grep來將它轉換爲文件 –

1

隨着發現

find dir -type f ! -name 'file[ab]' -exec file -b {} \; 

或者僅僅是慶典:

shopt -s globstar 
for f in dir/**/file[^ab]; do 
    file -b "$f" 
done 
+0

不錯,儘管我建議在find命令中使用'+'而不是'\;'來處理(通常)_single_'file'調用。也許值得一提的是,GNU和BSD'find'具有非標準的'-regex' /'-iregex'測試用於真正的基於正則表達式的匹配。 – mklement0

1

如果你想忽略模式你可以使用!運算符,它會起作用摹這樣的:

find -type f ! -name "file[ab]"