私のシナリオは、次のコマンドを使用してdiffディレクトリを並べて実行することです。
diff -ry <folder1> <folder2>
diff 出力の行番号。デフォルトでは、行番号は並列比較には表示されず、このパラメータはでのみ--new-line-format
使用できません。diff -y
diff -u
私が試したのは[ファイルのみ]です。
diff -y <(cat -n file1) <(cat -n file2)
行番号を生成します。上記のコマンドは最初に行番号を生成し、それをdiffコマンドに渡すため、diff結果の行番号は変更されません。
しかし、いざ使用したときにdiff -ry
できることは何もありませんでした。xargs
コマンドで同様の[プリプロセッサなど]を使用してcat -nを適用する方法はありますかdiff -ry
?
答え1
インラインdiff -ru
出力を並列プレゼンテーションに変換できます。行番号を含むPythonプログラムcdiff
とも呼ばれる色を使用して色を指定します。cdiff.pycdiff
(のラッパーと混同しないでくださいcolordiff
)、作者:Matthew Wang。
リンクに記載されている提案されたインストール方法に従って、またはcdiff.py
ダウンロードしたスクリプトをPATHに抽出してから、次のことができます。
diff -ru dir1 dir2 | cdiff.py -s
答え2
スティーブン・ハリス素晴らしい答えが提供されました。この質問の以前のバージョン。残念ながら、改行文字を含むファイル名の病理学的ケースは処理されません。これは、この出来事に対処する彼の答えを少し修正したものです。 (cat -n
代わりにnl
、オプションを使用するように変更したりしました-y
。diff
)
find folder1 -type f -exec bash -c 'for file1
do
file2="${file1/folder1/folder2}"
echo "Comparing $file1 to $file2"
diff -y <(cat -n "$file1") <(cat -n "$file2")
done' bash {} +
xargs
Stephenの答えに対するコメントで解決策を求めたので、次のことができます。
find folder1 -type f -print0 | xargs -0 bash -c 'for file1
do
file2="${file1/folder1/folder2}"
echo "Comparing $file1 to $file2"
diff -y <(cat -n "$file1") <(cat -n "$file2")
done' bash
ちなみに、これらのコマンドはPOSIXシェルがサポートされていないためGNU環境で完了する必要があり、bash
POSIXがサポートされていないため、ソリューションはGNU環境で完了する必要があります。 (もちろん、次に置き換えて削除できますが、改行文字を含むファイル名を処理する機能が失われます。)${parameter/pattern/string}
xargs
find -print0
xargs -0
-print0
-print
-0