[英]How to get `diff -qr` to display all files under subdirs?
假設這是我的文件樹:
a
a/file1
a/subdir1
a/subdir1/file1
a/subdir1/file2
b
b/file1
當我運行diff -qr ab
,它返回以下內容。 它正在執行遞歸差異,但未在子目錄下列出文件。
Files a/file1 and b/file1 differ
Only in a: subdir1
我想看的是下面的內容。 是否有任何diff
選項可以做到這一點?
Files a/file1 and b/file1 differ
Only in a: subdir1
Only in a: subdir1/file1
Only in a: subdir1/file2
(注意:我正在使用Ubuntu,GNU diffutils 3.2)
diff似乎沒有提供關於一個目錄中存在的文件的比較或輸出,而不是您嘗試執行的另一個目錄。 正如Matt在下面指出的那樣,您必須解析diff之外a和b下方的文件列表,並調用diff來比較兩個目錄中都存在的文件,並輸出僅出現在一個目錄中的文件名。 如果diff中有類似的東西,那將是很好的選擇,但是本質上是要求diff比較file_a和nonexistent_file_b之間的差異。 對不起,最初的誤讀。
運行diff -qr ab
時獲得該輸出的原因是因為subdir1
僅位於a
。 因此, a
下a
所有內容都必須不同於b
因此顯然不會遍歷並列出所有文件。 我還沒有找到一種列出所有文件的方法。 我整理了另一個命令,希望會對您有所幫助!
我的文件結構:
Matt@MattPC ~/perl/testing/10
$ find .
.
./a
./a/file1
./a/subdir1
./a/subdir1/file1
./a/subdir1/file2
./b
./b/file1
您運行的diff命令(輸出相同):
Matt@MattPC ~/perl/testing/10
$ diff -q -r a b
Only in a: subdir1
這是我寫的命令,希望可以為您提供所需的信息。 基本上,它調用find a
和find b
並將輸出通過管道傳遞給diff進行比較。 但是,我們必須通過管道將其sed 's/^[^/]\\+//'
到sed 's/^[^/]\\+//'
以刪除第一個目錄的名稱,在這種情況下為a
和b
。
Matt@MattPC ~/perl/testing/10
$ diff <(find a | sed 's/^[^/]\+//') <(find b | sed 's/^[^/]\+//')
3,5d2
< /subdir1
< /subdir1/file1
< /subdir1/file2
希望這可以幫助! 讓我知道該命令是否需要tweeking。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.