Я нашел неожиданное для меня поведение команды «find -exec» bash, и я был бы признателен за некоторую интерпретацию. То же самое задание можно выполнить с помощью «для имени_файла в find ....
; do ....», поэтому вопрос заключается в том, почему он не работает с опцией -exec find.Неожиданное поведение find -exec
Есть две папки (SRC/и src /) с одним и тем же набором файлов. Я хочу, чтобы сравнить файлы в этих папках:
find src/ -type f -exec sh -c "diff {} `echo {} | sed 's/src/SRC/'`" \;
это, однако, не сравнить файлы ... какой-то причине СЭД команды не делает замену. Если есть только один файл, например, «а», в каждом из этого папки, то команда
find src/ -type f -exec sh -c "echo {} `echo {} | sed 's/src/SRC/'`" \;
выходы
src/a src/a
если один делает подобную вещь в Баше, все следующие команды дают тот же результат (SRC/а):
echo src/a | sed 's/src/SRC/'
echo `echo src/a | sed 's/src/SRC/'`
sh -c "echo src/a | sed 's/src/SRC/'"
sh -c "echo `echo src/a | sed 's/src/SRC/'`"
но если эти команды поступают на "найти -exec ..." выходы различны:
find src/ -type f -exec bash -c "echo {} | sed 's/src/SRC/'" \;
дает "SRC/A"
и
find src/ -type f -exec bash -c "echo `echo {} | sed 's/src/SRC/'`" \;
дает "SRC/а"
Это ожидаемое поведение?
Почему вы не используете 'дифф -r SRC src'? – GMichael
Escape '\' 'как' \\ '' – anishsane
@ Майкл, это хороший момент, но он не отвечает на мой вопрос. Чтобы ответить на ваш вопрос: изначально я хотел получить в конце что-то, вызывающее emacs -q --eval '(ediff-merge-files "file2" "file2")', но понял, что что-то не так с find ... Тогда приведенный к этому примеру .... – Mitya