
コマンドラインdiff
ユーティリティを使用して、2 つのディレクトリを再帰的に比較しようとしています。 と という 2 つのフォルダがありdiff1
、diff2
その内容は次のようになります。
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
の両方に共通のサブディレクトリがあるとします。再帰とは、元のコマンドがどこかの時点でdiff1
diff2
diff -r diff1 diff2
diff -r diff1/foo diff2/foo
OK、実際には、これはおそらく、単一のプロセス内でサブルーチンが自分自身を呼び出すことによって行われます (ただし、実際にdiff
実行可能ファイルを呼び出す実装は可能だと思います)。それでも、論理的には次のようになります。
はありますdiff1/folder
が、 はありませんdiff2/folder
。diff
これらを比較するにはどのように呼び出すことができますか? つまり、<unknown_name>
以下のフォームから目的の出力を取得するには、どうすればよいですか?
diff -r diff1/folder diff2/<unknown_name>
適合するものはありません<unknown_name>
。再帰は、再帰やのようなものにならずにdiff
に降りることはできません。再帰または であることがその役割ではありません。folder
ls
find
ls
find
それでも、 から学習した後は、 または (デフォルトでは再帰的) を使用してクエリを実行できdiff1/folder
ます。ls -R
find
diff
Only in diff1: folder