В основном это не имеет никакого бита контрольной суммы. Для идентификации опечатки Вы могли бы попытаться совместно использовать контрольную сумму (например, MD5) Вашей суммы MD5 по тому же каналу и проверить его.
Никогда не встраивайте {}
в код оболочки! Это создает уязвимость инъекции команд. Обратите внимание, что для cat "{}"
проблема не только в символах "
, \
, `
, $
(рассмотрим, например, файл с именем ./$(перезагрузка)/accept_ra
).
(кстати, некоторые реализации находят
не позволяют этого сделать, а POSIX оставляет поведение неопределенным , когда {}
не является само по себе аргументом для найти
)
здесь, вы захотите передать имена файлов в качестве отдельных аргументов в sh
(а не в аргументе code), а в строчном скрипте sh
(в аргументе code), чтобы ссылаться на них с помощью параметров позиционирования:
find . -name accept_ra -exec sh -c 'echo 0 > "$1"' sh {} \;
Или, чтобы избежать выполнения одного sh
в каждом файле:
find . -name accept_ra -exec sh -c 'for file do
echo 0 > "$file"; done' sh {} +
То же самое относится к xargs -I{}
или zsh
's zargs -I{}
. Не пишите:
Что было бы такой же уязвимостью инъекции команд, как и в find
выше, но:
<list.txt xargs sh -c 'for file do cmd > "$file"; done' sh
Что также имеет преимущество, так как позволяет избежать запуска по одному sh
на файл и ошибки, когда list.txt
не содержит ни одного файла.
С помощью zsh
zargs
вы, вероятно, захотите использовать функцию, а не вызывать sh -c
:
do-it() cmd > $1
zargs ./*.txt -- do-it
Обратите внимание, что во всех вышеприведенных примерах второй sh
идет в строчный скрипт $0
. Вы должны использовать там что-то соответствующее (например, sh
или find-sh
), а не такие вещи, как _
, -
, --
или пустую строку, так как значение в $0
используется для сообщений об ошибках в оболочке оболочки:
$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' inline-sh {} \;
inline-sh: ./accept_ra: Permission denied
GNU parallel
работает по-другому. С ним вы делаете , а не , чтобы использовать sh -c
, так как parallel
уже запускает оболочку и пытается заменить {}
на аргумент, процитированный в правом синтаксисе для оболочки.
<list.txt PARALLEL_SHELL=sh parallel 'cmd > {}'