Bash

Bash:通過對兩個文件參數進行排序來使用 exec find 選項

  • August 7, 2018

假設我想比較這兩個目錄之間具有相同文件名的文件:

/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) 選項為您執行所有排序和遞歸。

引用自:https://unix.stackexchange.com/questions/461080