簡體   English   中英

如何獲取diff -qr在子目錄下顯示所有文件?

[英]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 因此, aa所有內容都必須不同於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 afind b並將輸出通過管道傳遞給diff進行比較。 但是,我們必須通過管道將其sed 's/^[^/]\\+//'sed 's/^[^/]\\+//'以刪除第一個目錄的名稱,在這種情況下為ab

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.

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