次の2つのディレクトリ間で同じファイル名を持つファイルを比較したいとします。
/tmp/datadir/dir1/dir2/
そして
/datadir/dir1/dir2/
必要タイプ比較する前に。
/tmp
私は現在そのディレクトリにあり、次のオプションを使用して実行してみました。find
exec
find datadir -type f -exec sdiff -s <( sort {} ) <( sort "/"{} ) \;
ただし、エラーが発生します。
並べ替え: オープン失敗: {}: そのファイルまたはディレクトリがありません。
並べ替え: オープン失敗: /{}: そのファイルまたはディレクトリがありません。
ただし、次のコマンドは正しく機能しますが、適切な比較のためにデータがソートされません。
find data -type f -exec sdiff -s {} "/"{} \;
この問題をどのように解決できますか?
答え1
交換は、コード内のプロセス交換()などの評価によって{}
行われ、発生します。find
<(…)
使用bash -c
:
find datadir -type f -exec \
bash -c 'sdiff -s <( sort "$1" ) <( sort "/$1" )' bash {} \;
または、bash
ファイルごとに1つのインスタンスを実行しないでください。
find datadir -type f -exec bash -c '
for file do
sdiff -s <( sort "$file" ) <( sort "/$file" )
done' bash {} +
答え2
-r
すべての並べ替えと再帰を実行する(再帰)オプションの使用を検討できます。