Bash
Bash:通過對兩個文件參數進行排序來使用 exec find 選項
假設我想比較這兩個目錄之間具有相同文件名的文件:
/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 {} "/"{} \;
我該如何解決這個問題?
替換
{}
是在您的程式碼中的程序替換 ( ) 等find
的評估之後完成的。<(…)
使用
bash -c
:find datadir -type f -exec \ bash -c 'sdiff -s <( sort "$1" ) <( sort "/$1" )' bash {} \;
或者為了避免
bash
每個文件執行一個實例:find datadir -type f -exec bash -c ' for file do sdiff -s <( sort "$file" ) <( sort "/$file" ) done' bash {} +
您可以考慮使用
-r
(recursive) 選項為您執行所有排序和遞歸。