Пакет nx сильно устарел, и мне пришлось загрузить исходный код. Затем я выбрал Fedora в качестве системы для установки, хотя это ОС Arch.
Запустить nxserver. Я пока не могу к нему подключиться.
не Делают - должностное лицо mv
справочник, который в настоящее время исследуется , находят
. Кажется, что найти
путается, когда вы это делаете.
Обходной путь: сначала найдите каталоги, а затем переместите их.
cd "/mnt/user/New Movies/"
find -type f \( -name "*.avi" -or -name ".*mkv" \) -mtime +180 \
-printf "%h\0" | xargs -0 mv -t /mnt/user/Movies
Объяснение:
-printf
печатает совпадение в соответствии со строкой формата. % h
печатает часть пути совпадения. Это соответствует «$ {0 %/*}»
в вашей команде. \0
разделяет предметы с помощью символа null. Это лишь мера предосторожности, если имена файлов содержат новые строки. xargs
собирает входные данные из канала, а затем выполняет их аргументы с добавленными входными данными. -0
указывает xargs, что ввод должен быть разделен на нуль, а не на новую строку. mv-t < цель >
позволяет вызывать mv
со всеми исходными аргументами, добавленными в конце. Обратите внимание, что это все еще не абсолютно безопасно. Некоторые тайминг планировщика фрик в сочетании с буферами каналов может по-прежнему привести к выполнению mv
до поиска
, перемещенного из каталога. Чтобы предотвратить даже то, что вы можете сделать это так:
cd "/mnt/user/New Movies/"
find -type f \( -name "*.avi" -or -name ".*mkv" \) -mtime +180 \
-printf "%h\0" > dirstomove
xargs -0 mv -t /mnt/user/Movies < dirstomove
Фоновое объяснение:
Я понимаю, что происходит с find
:
find
пересекает каталог /mnt/user/New Movies/
. В то время как там он принимает к сведению доступные каталоги в своем кэше. поиск
проходит в один из подкаталогов с помощью системного вызова chdir (subdirname)
. find
находит файл фильма, который проходит через фильтры. find
выполняет mv
с заданными параметрами. mv
перемещает каталог в /mnt/user/Movies
. find
возвращается в родительский каталог с помощью системного вызова chdir (..)
, который теперь указывает на /mnt/user/Movies
вместо /mnt/user/New Movies/
find
, поскольку он не находит ранее отмеченные каталоги и порождает множество ошибок. Это предположение основано на ответе на этот вопрос: find -exec mv останавливается после первого exec . Я не знаю, почему найти
просто перестает работать в этом случае и выбрасывает ошибки в вашем случае. Пояснением могут служить различные версии find
.
Установите переменную окружения IFS в IFS=$(echo -en "\n\b");
, чтобы оболочка разделяла элементы на основе новых строк, а не пробелов.
Дополнительно это -exec sh -c 'mv "${0%/*}" /mnt/user/Movies' {} \;
довольно странно. Если я не ошибаюсь, упростите до -exec mv {} /mnt/user/Movies \;