Это предполагает, что имена каталогов не имеют никаких нечетных символов, таких как пробелы или новые строки на их имена и что нет никаких имен файлов, которые запускаются с точки.
Непротестированный.
find /files -type d | while read -r dir
do
base="000000${dir##*/}"
new="/files/namespaced/${base: -9:3}/${base: -6:3}/${base: -3}"
mkdir -p "$new"
mv "$dir/*" "$new"
rmdir "$dir"
done
Другой способ получить новое имя каталога:
new=$(echo "$dir" | sed 's|...$|/&|;s|\(.*\)/\(.*\)/\(...\)$|\1/namespaced/000000\2/\3|; s|\(.*\)/.*\(...\)\(...\)/\(...\)$|\1/\2/\3/\4|' "$dir")
Для этого вы можете использовать sudo
. Во-первых, вам нужно изменить файл / etc / sudoers
, чтобы добавить правило, позволяющее пользователю hudson
стать другим пользователем для рассматриваемого сценария. Предположим, у вас есть учетная запись user1
, для которой необходимо запустить /usr/local/bin/my_script.sh
.
Запустите visudo
, чтобы изменить ] sudoers
файл и добавьте подобное:
hudson ALL=(user1) NOPASSWD: /usr/local/bin/my_script.sh
Затем используйте следующую команду sudo
, чтобы запустить сценарий из hudson:
sudo -u user1 /usr/local/bin/my_script.sh
Это очень важно, чтобы вы используйте visudo
, чтобы изменить файл sudoers
, чтобы проверить файл на наличие ошибок, прежде чем вставлять его на место. Как и я'
sudo -u hudson command
запустит команду от имени пользователя hudson. Его необходимо настроить в вашем файле sudoers, где вы также можете настроить его так, чтобы пароль не требовался.
Комментируя запись Defaults requiretty
в /etc/sudoers
или другие включенные файлы suders должны помочь.
Что касается ошибки perl - вы, вероятно, используете другой PERL5LIB или другой бинарный файл perl для этого пользователя - и он не будет передан в sudo (если только вы не используете -E или env_keep). Проверьте ваше окружение и, возможно, разрешения.
.