假设我想比较这两个目录之间具有相同文件名的文件:
/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
每个文件运行一个实例:
find datadir -type f -exec bash -c '
for file do
sdiff -s <( sort "$file" ) <( sort "/$file" )
done' bash {} +
答案2
您可以考虑使用-r
(递归)选项来为您完成所有排序和递归。