Я думаю, что >
интерпретируется в текущей оболочке. То же относится и к *
, т. Е. Если у вас есть filename-A.conf
(или, что еще хуже: больше подходящих файлов) в текущем каталоге, то глобализация оболочки нарушит вашу команду. Также обратите внимание: ваше sudo
относится только к find
, а не к xargs
.
Попробуйте это (с sudo
если необходимо):
find /opt -name 'filename-*.conf' -print0 | xargs -r0 sh -c 'echo "text_to_send" | tee "$0" "$@"' > /dev/null
Предупреждение: tee
перезапишет файлы (как >
делает, так что я думаю, это то, что вы хотите); используйте tee -a
для добавления.
find -print0
и xargs -0
работают даже с необычными именами файлов,
xargs -r
не запускается, если файл не найден,
sh
обрабатывает внутреннюю трубу,
$0" "$@"
передает все имена файлов (после xargs
) безопасной командой, sh
,
tee
обрабатывает один или несколько найденных файлов,
- последнее перенаправление должно предотвратить появление
text_to_send
в вашем терминале.