find + xargs - копирование / перемещение файлов из одного подкаталога в другой

Параметры After= и Before= являются строго для заказа запуска (и, возможно, выключения) двух служб, если запрашивается запуск обеих. Перечисление служб не означает, что эти службы также будут запущены.

Для управления запуском другой службы необходимо использовать Reques=, Wants=, или Conflicts= (которые находятся в разделе [Unit]) или WantedBy= (которые находятся в разделе [Install]).

В вашем случае, вы хотите запустить службу, когда что-то, от чего она зависит, будет запущено (что не происходит автоматически, так как для этого нет причин). Вы захотите добавить в файл следующее и затем запустить systemctl enable dependence:

[Install]
WantedBy=main.service

Это говорит о том, что когда main запускается, чтобы также запустить этот сервис, и что если этот сервис окажется неудачным, то не останавливайте main.

2
31.12.2017, 09:25
1 ответ
find /volume1/photoTest -type d -name eaDir_tmp -prune \
    -exec sh -c 'rsync -a "$1"/ "${1%/*}/@eaDir"' sh {} ';' \
    -o -type d -name @eaDir -prune

Это будет искать все каталоги, имя которых eaDir_tmpв или ниже /volume1/photoTest. Для каждого такого каталога будет выполняться следующая команда:

rsync -a "$1"/ "${1%/*}/@eaDir"

где $1— путь к найденному каталогу. Подстановка параметра ${1%/*}удалит последний компонент имени пути, превратив, например,. /volume1/photoTest/folderA/eaDir_tmpв /volume1/photoTest/folderA(, вы также можете использовать"$( dirname "$1" )").

Мы удаляем все найденные каталоги eaDir_tmpи @eaDirиз списка поиска, когда находим их, не позволяя findвойти в них. Это делается с помощью -prune.


С find, принимающим-execdir:

find /volume1/photoTest -type d -name eaDir_tmp -prune \
    -execdir rsync -a eaDir_tmp/ @eaDir ';' \
    -o -type d -name @eaDir -prune

Связанные:


Использованиеzsh:

for dirpath in /volume1/photoTest/*/eaDir_tmp(/DN); do
    rsync -a "$dirpath"/ "$dirpath:h/@eaDir"
done

Использованиеbash:

shopt -s dotglob nullglob
for dirpath in /volume1/photoTest/*/eaDir_tmp/; do
    rsync -a "$dirpath"/ "$(dirname "$dirpath")/@eaDir"
done
1
27.01.2020, 22:34

Теги

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