Копирование файлов из определенных подкаталогов на основе имени подкаталога в один каталог с последующим переименованием

Я создал следующий модульный файл:

[Unit]
Description=Something

[Service]
Type=forking
WorkingDirectory=/tmp
ExecStart=/tmp/script.sh
ExecStop=/tmp/script.sh
Restart=on-failure

Файл script.sh содержит следующее:

#!/bin/sh
echo "Forking"
/tmp/myscript.sh &

Файл myscript.sh содержит следующее:

#!/bin/sh
sleep 60
exit 1

Действительно, каждые 60 секунд systemd перезапускает службу.

Как показано здесь, обратите внимание на разные PID и время запуска, обратите внимание, что он перезапускает родительский элемент:

linux:~ # systemctl status myService.service
● myService.service - Something
   Loaded: loaded (/etc/systemd/system/myService.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2017-07-10 20:43:29 CEST; 57s ago
  Process: 4393 ExecStart=/tmp/script.sh (code=exited, status=0/SUCCESS)
 Main PID: 4396 (script.sh)
    Tasks: 2 (limit: 512)
   CGroup: /system.slice/myService.service
           ├─4396 /bin/sh /tmp/script.sh
           └─4397 sleep 60

Jul 10 20:43:29 linux.suse systemd[1]: Starting Something...
Jul 10 20:43:29 linux.suse script.sh[4393]: Forking
Jul 10 20:43:29 linux.suse systemd[1]: Started Something.
linux:~ # systemctl status myService.service
● myService.service - Something
   Loaded: loaded (/etc/systemd/system/myService.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2017-07-10 20:44:29 CEST; 1s ago
  Process: 4409 ExecStop=/tmp/script.sh (code=exited, status=0/SUCCESS)
  Process: 4417 ExecStart=/tmp/script.sh (code=exited, status=0/SUCCESS)
 Main PID: 4420 (script.sh)
    Tasks: 2 (limit: 512)
   CGroup: /system.slice/myService.service
           ├─4420 /bin/sh /tmp/script.sh
           └─4421 sleep 60

Jul 10 20:44:29 linux.suse systemd[1]: Starting Something...
Jul 10 20:44:29 linux.suse script.sh[4417]: Forking
Jul 10 20:44:29 linux.suse systemd[1]: Started Something.
0
24.08.2019, 04:40
1 ответ
find. -type f -path "./*.a/processed/*" -exec sh -c '
for path; do
  prefix=${path%%.a/processed*}
  cp "$path" "test/${prefix##*/}_${path##*processed/}"
done
' sh {} +

Опция -type fищет обычные файлы по заданному пути, а опция -execзапускает сценарий оболочки с результатом findв качестве аргументов({} +). В циклеfor-каждый аргумент присваивается переменной path.

Пример :Если переменная pathравна ./20070214_014700.a/processed/AZ.AS..HHZ, то

  • prefix=${path%%.a/processed*}удаляет суффикс ->./20070214_014700
  • ${prefix##*/}удаляет префикс к первому/->20070214_014700
  • ${path##*processed/}также удаляет префикс и оставляет имя файла ->AZ.AS..HHZ

Результирующее имя целевого файла команды cptest/20070214_014700_AZ.AS..HHZ.

0
28.01.2020, 03:20

Теги

Похожие вопросы