![](/img/trans.png)
[英]Compare filenames (without extension) from “Dir1” to subfolder “Dir2” assuming I'm at “Dir1”
[英]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 |
我想得到f1
和f4
。
您可以使用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.