簡體   English   中英

如何獲取 dir1 中不存在於 dir2 的所有項目的列表?

[英]How do I get the list of all items in dir1 which don't exist in dir2?

我想計算兩個目錄之間的差異 - 但不是在diff的意義上,即不是文件和子目錄的內容,而只是在項目列表方面。 因此,如果目錄具有以下文件:

目錄1 目錄2
f1 f2 f4 f2 f3

我想得到f1f4

您可以使用comm比較兩個列表:

comm -23 <(ls dir1) <(ls dir2)
  • 使用<(cmd)進程替換傳遞 cmd 的cmd ,就好像它是文件名一樣。 它類似於$(cmd)但不是將 output 捕獲為字符串,而是生成一個動態文件名(通常是/dev/fd/### )。
  • comm打印三列信息:文件 1 獨有的行、文件 2 獨有的行以及兩者中都出現的行。 -23隱藏第二列和第三列,只顯示文件 1 特有的行。

您可以擴展它以使用find進行遞歸差異。 如果你這樣做,你需要抑制 output 中的前導目錄,這可以通過幾個戰略性cd來完成。

comm -23 <(cd dir1; find) <(cd dir2; find)

編輯:由於@JohnKugelamn: 一個天真的基於差異的解決方案+改進:

diff --suppress-common-lines <(\ls dir1) <(\ls dir2) | egrep "^<" | cut -c3-

我們不再處理目錄,而是轉而處理文件; 然后我們使用常規差異,只取第一個文件中出現的行, diff標記為< - 然后最后刪除該標記。


自然可以通過檢查錯誤來美化上面的內容,驗證我們已經得到了兩個 arguments,打印使用信息等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM