Это не задание для find
, с тех пор нет никакой включенной рекурсии.
for x in */C/populate.sh; do
mkdir -- "${x%%/*}$suffix"
mkdir -- "${x%%/*}$suffix/C"
cp -p -- "$x" "./${x%%/*}$suffix/C"
done
Удалите -p
опция к cp
если Вы не хотите сохранять время изменения файлов.
Генерировать случайный суффикс, BSD/Linux mktemp
является столь портативным, как это добирается.
suffix=$(mktemp -u tmp_XXXXX)
Если Вы хотите что-то неопределенно случайно выглядящее и совместимый POSIX, это дает строку, которая изменяется каждую секунду и варьируется от местоположения до местоположения; Вы не можете действительно добиться большего успеха только с инструментами POSIX:
suffix=$({ hostname; pwd; date; } |
cksum | uuencode -m /dev/stdin | awk 'NR==2 {print substr($0,3,5)}')
При помещении этого кода в make-файл не забудьте:
$
знаки;;
вместо этого для разделения инструкций по оболочке (можно использовать backslash+newline+tab для помещения разрыва строки в make-файл, но та последовательность удалена для создания команды оболочки);set -e
, так, чтобы это прервалось, если существует какая-либо ошибка.Можно сделать это путем выполнения единственной команды SSH, но с расположением надлежащего соединения передачи данных, выполнения команды и управляющей логики трудно справиться.
Легче установить соединение SSH, сделать Вашу работу с любой смесью ssh
, scp
, sftp
, rsync
, sshfs
, … подходит Вам, и наконец закройте соединение SSH.
SSH предлагает соединение, на котором могут осуществить контрейлерные перевозки другие процессы SSH: основное соединение. Запустите основное соединение и поддерживайте его в рабочем состоянии:
ssh -N -M
Передайте учетные данные как вход с, ожидают, так как необходимо обеспечить пароль. Затем выполните другие команды SSH как Вам нравится. Когда Вы больше не нуждаетесь в соединении, работаете ssh -O exit
.
Чтобы гарантировать, что команды SSH будут ведомыми устройствами существующего основного соединения (и следовательно не потребуют никакой аутентификации), передайте то же ControlPath
опция ко всем вызовам SSH. Любая передача это как параметр командной строки (-o ControlPath=…
, отметьте нижний регистр), или определите его в ~/.ssh/config
. Значение является путем, где ssh будет создавать или искать сокет, который позволяет ведомым устройствам и ведущему устройству связываться; это должно быть в перезаписываемом каталоге в файловой системе, которая поддерживает именованные сокеты, и имя должно быть уникальным для каждого соединения (таким образом, это должно включать целевой узел, порт и пользователя).
См. также Используя уже установленный канал SSH, и SSH легко копируют файл в локальную систему
Я думаю, что Ваш подход мог быть улучшен.
Так Ваши удаленные получения по запросу файл и перезапуски сервис, Ваш php инициировал удаленный сценарий для выполнения.