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