Хотя можно проанализировать вывод от a find
необходимо заботиться о пробелах и т.д. К сожалению, gunzip
не имеет a --keep
/-k
флаг для хранения (как bzip2
и xz
действительно имейте).
Если сделал бы маленький сценарий gunzipkeep
это берет один параметр (gzipped файл) и делает распаковку, поместило тот сценарий где-нибудь в Ваш $PATH и называет его с:
find /opt/fooapp/foosubdirectory -name "foo.ext.gz" -print0 | xargs -0 --norun-if-empty --max-args 1 gunzipkeep
Сценарий мог быть чем-то как:
#!/bin/bash
inname=$1
outname=${inname%.gz}
gunzip -c "$inname" > "$outname"
Я ПОЛУЧИЛ ОТВЕТ ОТ здесь
Делать такие вещи небезопасно или не является стандартной практикой (на самом деле многие считают это катастрофой), это действительно не очень хорошая идея - помещать пароль в скрипт. Более стандартным подходом было бы просто ожидать, что весь сценарий будет выполняться с привилегиями root, или просто попросить сценарий ввести пароль. Вы также можете разрешить выполнение различных команд через sudo без пароля определенным пользователям, используя опцию NOPASSWD
в /etc/suoders
.
Однако теперь, когда вы знаете о рисках, можно использовать sudo -kS
, чтобы sudo считывал пароль из stdin
:
sudo -kSs << EOF
password
whoami
echo "Not a good idea to have a password encoded in plain text"
EOF
Вы пробовали / etc / sudoers?
your_user ALL=(ALL) NOPASSWD: /path/to/script.sh
(редактировать с: sudoedit / etc / sudoers) Тогда вы сможете запустить:
sudo /path/to/script without password