chroot
не является контейнером и не изолирует процесс полностью от остальной системы. Если вы смонтируете / proc
в вашем chroot-каталоге, процесс, запущенный в этом chroot-каталоге, сможет видеть процессы, выполняющиеся за пределами вашего chroot-каталога.
Тем не менее, если вы не возражаете, chroot
разработан для обработки именно тех случаев, которые вы описываете. Фактически, до поддержки многоархитектурности в Debian рекомендуемый способ запуска 32-битных приложений в 64-битной системе заключался в создании 32-битного chroot и установке минимальной 32-битной базы Debian.
Если вы попробуете ls -Art /home/user/directory
отдельно, вы заметите, что он выводит только имена файлов без компонента пути к каталогу. Это означает, что в вашей переменной NEW
отсутствует бит /home/user/directory
в начале пути к файлу.
Добавление этого к NEW
заставит вашу команду работать, предполагая «хорошие» имена файлов (без символов новой строки или других пробелов, или каких-либо подстановочных символов имени файла ), и предполагая, что вы счастливы принимать что угодно имя файла, которое выводит tail
, даже если это имя каталога.
Лучший способ решить вашу проблему с перемещением самого последнего измененного обычного файла из каталога в другой — использовать оболочку zsh
:
mv /home/user/directory/*(.Dom[1]) /usr/local/directory
(.Dom[1])
— это квалификатор подстановки, который заставляет предыдущий шаблон соответствовать только обычным файлам (.
), делает возможным соответствие скрытым именам (D
, действует как параметр оболочки dotglob
в bash
), упорядочивает результирующие list по метке времени модификации(om
)и выбирает первый элемент из отсортированного списка ([1]
).
Из bash
или любой другой оболочки:
zsh -c 'mv /home/user/directory/*(.Dom[1]) /usr/local/directory'