Самое близкое, что вы можете получить, это вложить циклы for, то есть
for f in $FILES1 ; do
for f2 in $FILES2 ; do
if [ ${f##*/} = ${f2##*/} ]; then
diff $f $f2
break
fi
done
done
для итерации по рекурсивным dir, вы можете положиться на find
, чтобы вернуть список файлов для обработки
PATH1=/path/to/one
PATH2=/path/to/two
for f in $(find $PATH1 -print ) ; do
for f2 in $(find $PATH2 -print ) ; do
if [ ${f##*/} = ${f2##*/} ]; then
diff $f $f2
break
fi
done
done
Извините, у меня нет способа проверить это сейчас, ${f##*/}
может быть не совсем правильным.Намерение состоит в том, чтобы создать только базовое имя файла (я думаю, вы могли бы также использовать его, $(basename $f )
за счет 2 процессов для каждого.
Оба эти процесса являются очень дорогими, проверяя множествонесовпадающие пары имен файлов. Разрыв внутри loop2 немного помогает.
Альтернативное решение - использовать один путь для создания списка драйверов, а затем использовать предоставленные имена для генерации альтернативных относительных путей, например
for f in $FILES1 ; do
f2=../two/$f{##*/}
if [ -f ${f2} ] ; the
diff $f $f2
else
printf "no alternate file found in ../two for f=${f}"
fi
done
Если необходимо, вы можете продублировать этот цикл и поменять местами f2 и f, чтобы проверить «другую сторону» вашей системы.
Надеюсь, это поможет.