Поскольку файлы должны располагаться в разных каталогах, вам нужно запустить mv
несколько раз, по крайней мере один раз для каждого целевого каталога. Вы можете сделать это, запустив mv
в цикле for .
for x in /root/*
do
mv -i "$x"/*/*/*/* "$x"
done
Тело цикла (команда mv
)выполняется для каждой записи в каталоге /root
по очереди. При каждом выполнении тела цикла "$x"
заменяется путем /root/subN
.Команда mv -i "$x"/*/*/*/* "$x"
перемещает файл типа /root/sub1/aaaa/bbbb/cccc/dddd
в каталог /root/sub1
, т.е. файл перемещается в /root/sub1/dddd
.
С опцией -i
, mv
спросит, существует ли файл назначения, что может произойти, если у вас есть, например. как /root/sub1/aaa1/bbb/ccc/ddd
, так и /root/sub1/aaa2/bbb/ccc/ddd
.
Изучив systemd, я наткнулся на приятное открытие. Оказывается, нет необходимости создавать специальный сервис для решения этой проблемы, так как systemd уже предоставляет решение(systemd-tmpfiles
)для этой цели. Это структурированный и настраиваемый метод управления временными каталогами и файлами.
https://www.freedesktop.org/software/systemd/man/systemd-tmpfiles.htmlhttps://www.freedesktop.org/software/systemd/man/tmpfiles.d.html
Просто создайте файл /etc/tmpfiles.d/volatile-subfolder.conf
с этим содержимым:
d /var/volatile/subfolder 0755 root root - -
И перезагрузиться.
Один из способов решить эту проблему — создать новую службу systemd (или изменить существующую )для управления созданием этого каталога в ваших /var/volatile
tempfs с помощью директивы модуля After=local-fs.target
.
[Unit]
Description=Tempfs initialize
After=local-fs.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=mkdir -p /var/volatile/subfolder
[Install]
WantedBy=multiuser.target
Добавьте это к /etc/systemd/system/tmpfsinit
и затем выполните обычное systemctl daemon-reload && systemctl enable tempfsinit
.
В качестве альтернативы, если у вас уже есть пользовательская служба systemd, вы также можете добавить директиву модуля After
и команду для создания нужного подкаталога в команду ExecStartPre
.