2009-05-21 56 views
0

last question擴大,讓我們單獨分析的東西。AND運算符如何在FIND命令中工作?

AND-算子,交?

我舉一個例子:

$ find . | awk -F"/" '{ print $2 }' 

.zcompdump 
.zshrc 
.zshrc_copy 
.zshrc_somequy 
.bashrc 
.emacs 

$ find ~/bin/FilesDvorak/.* -maxdepth 0 | awk -F"/" '{ print $6 }' 

.bashrc 
.emacs 
.gdbinit 
.git 
.profile 

當我保存輸出到單獨的列表,我不明白爲什麼該命令不採取共同的東西:

find -f all_files -and -f right_files . 

我只想要:

.bashrc 
.emacs 
+1

至少對於Linux和Solaris以及CygWin,find沒有「-f」測試。也許在OSX上。如果沒有,這可能是你的問題的一部分。 – Eddie 2009-05-21 23:42:48

回答

1

要在Dave的回答略有擴大:

你似乎想要兩個查找命令的交集。 Find不會執行集合操作。查找將遍歷(或向上取決於你如何看待它)一組路徑,適用的表達它遇到的每個項目。它需要的默認操作是打印它找到的項目的路徑,根據表達式計算爲true。 (我相信你需要找到一些老版本明確添加-print表達式。)不整理結果。對於路口的分析,您可以使用工具,如差異,那麼sdiff,通訊

我假設你正在努力尋找在兩個單獨的目錄名稱相同的項目,而不是在子目錄。

假設bash,那麼你可以這樣做

comm -12 <(find . -maxdepth 1 | sort) <(cd ~/bin/FilesDvorak/; find . -maxdepth 1 | sort) 

我相信,在查找命令 - 和幾乎總是多餘的。防爆。

find . -type f ! -type d 

相同

find . -type f -and ! -type d 

另外-f標誌是要添加到遍歷路徑的選項。我不相信這是一種表達。請'找人'澄清。

1

- 只能在測試中使用。如果你想找到兩個列表的共同元素,你應該這樣做

sort all_files > all_files.sorted 
sort right_files > right_files.sorted 
comm -12 all_files right_files > common_files 
+1

所以選項-12意味着取兩個文件的交集。無論您將選項編寫爲-12還是-21,顯然無關緊要。 – 2009-05-22 15:21:58

0

與門 - 選項在男子

的-and運算符是邏輯與 操作。因爲它是 所暗示的兩個表達式的並置,所以它不需要指定 確實 。如果兩個表達式均爲真,則表達式評估 至 爲真。如果第一個表達式爲假,則不計算第二個 表達式 。

本手冊的這一部分對我來說比較神祕。但是,讓我們來分析一下。

第一句:喜歡和運營商數學。只有兩個1s

第二個句子:這表明我不需要使用該命令,正如你可以在戴夫的答案中看到的那樣。大! - - 似乎將第一個表達式與-AND和和表達式並置爲-AND。 請向我澄清這個希臘語。

第3句:重複:它在第一句中用「邏輯」一詞表示相同。

第四句: repeation:它說,01意味着假

同樣的英語:

令p和q是兩個表達式用下面的真相valuas

p q pANDq 
1 1 1 
1 0 0 
0 1 0 
0 0 0 

哪裏1表示爲真,而0表示錯誤。

請注意,手冊通常包含多餘的描述,有時會出現錯誤。