Bash:通过对两个文件参数进行排序来使用 exec find 选项

Bash:通过对两个文件参数进行排序来使用 exec find 选项

假设我想比较这两个目录之间具有相同文件名的文件:

 /tmp/datadir/dir1/dir2/

 /datadir/dir1/dir2/

需要种类在比较之前。

我当前位于该目录中,我尝试使用以下选项/tmp运行它:findexec

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每个文件运行一个实例:

find datadir -type f -exec bash -c '
  for file do
    sdiff -s <( sort "$file" ) <( sort "/$file" )
  done' bash {} +

答案2

您可以考虑使用-r(递归)选项来为您完成所有排序和递归。

相关内容