diffは再帰的に動作しません

diffは再帰的に動作しません

コマンドラインdiffユーティリティを使用して、2 つのディレクトリを再帰的に比較しようとしています。 と という 2 つのフォルダがありdiff1diff2その内容は次のようになります。

ここに画像の説明を入力してください

diff2空です。しかし、私がそうするとdiff -r diff1 diff2

$ diff -r diff1 diff2
Only in diff1: folder
Only in diff1: test.html

これは困ったものです。再帰的に動作させるには何をすればよいのでしょうかdiff? を試してみました--recursiveが、役に立ちません。私は El Capitan を使用していますが、 で をdiff -v取得できますdiff (GNU diffutils) 2.8.1

答え1

あなたが経験した動作は仕様です。 以外のツールを許可しない限り、あなたが望む結果を得ることはできないと思います。diffあなたのコメントから:

「再帰的に」と読むと、プロセスが最初のレベルで停止しないものと想定します。

最初のレベルで止まるわけではありません。再帰の意味に注意してください。

関数を使用して自分自身のコード内から自分自身を呼び出す

(ソース:ここ(強調は筆者による)

fooの両方に共通のサブディレクトリがあるとします。再帰とは、元のコマンドがどこかの時点でdiff1diff2diff -r diff1 diff2

diff -r diff1/foo diff2/foo

OK、実際には、これはおそらく、単一のプロセス内でサブルーチンが自分自身を呼び出すことによって行われます (ただし、実際にdiff実行可能ファイルを呼び出す実装は可能だと思います)。それでも、論理的には次のようになります。

はありますdiff1/folderが、 はありませんdiff2/folderdiffこれらを比較するにはどのように呼び出すことができますか? つまり、<unknown_name>以下のフォームから目的の出力を取得するには、どうすればよいですか?

diff -r diff1/folder diff2/<unknown_name>

適合するものはありません<unknown_name>。再帰は、再帰やのようなものにならずにdiffに降りることはできません。再帰または であることがその役割ではありません。folderlsfindlsfind

それでも、 から学習した後は、 または (デフォルトでは再帰的) を使用してクエリを実行できdiff1/folderます。ls -RfinddiffOnly in diff1: folder

関連情報