Как скопировать все файлы в папку, за исключением файлов, которые записываются?

Я загружаю несколько файлов в папку, downloading через HTTPie . Сценарий bash предназначен для обработки загруженных файлов, и я попытался скопировать загруженные файлы в другую папку, как

 find /folder/downloading -type f -exec mv '{}' /folder/downloaded \; 

но это также копирует файлы, которые еще не закончены. Я попытался ограничить передачу старых файлов, добавив в -mmin +5 . Какая эффективная команда оставить файлы записывается и загружает только загруженные файлы?

  • Выполнить скрипт оболочки после успешного соединения с сервером
  • Зачем избегать тривиальных символов в сценарии оболочки?
  • Перейти на один уровень от несуществующего пути
  • Скрипт с использованием sudo работает с терминала, но не с ярлыка на рабочем столе
  • Могу ли я поставить более одного условия, если?
  • Есть ли какая-нибудь книга, учебник по очень сложным сценариям оболочки
  • Bash найти и заменить в файле C ++
  • Измените только расширение файла
  • One Solution collect form web for “Как скопировать все файлы в папку, за исключением файлов, которые записываются?”

    Не очень эффективно, но вы можете сделать:

     find /folder/downloading -type f -exec sh -c ' for file do lsof -F a "$file" | grep -qw || mv "$file" /folder/downloaded done' sh {} + 

    Это проверяет, что файл не указан с помощью режима ccess в режиме предварительного просмотра.

    Реализация fuser psmisc как правило, найденная в операционных системах на базе Linux, имеет функцию -w (для проверки файлов, открытых для записи), но, к сожалению, она работает только с -k чтобы убить соответствующие процессы. Однако, похоже, вы все еще можете использовать его, используя псевдосигнал 0, который ничего не делает:

     find /folder/downloading -type f -exec sh -c ' for file do fuser -s -w -k -0 "$file" || mv "$file" /folder/downloaded done' sh {} + 

    Удалите -s (или даже замените его на -v ), если вы хотите увидеть, какие процессы () препятствуют перемещению.

    Обратите внимание: если вы не выполняете эти команды как суперпользователь, вы получите информацию о своих процессах. Если процессы, загружающие файлы, работают как другой пользователь, они останутся незамеченными.

    Также обратите внимание, что, если вы не перемещаете файлы в другую файловую систему, перемещение файлов не будет препятствовать тому, чтобы какой-либо процесс в данный момент записывался в файл, заканчивая запись на него.

    Однако, в зависимости от того, что они были предназначены для последующего использования, они могут быть смущены, если после их написания файл больше не существует (например, если они хотят изменить некоторые атрибуты файла после его загрузки и сделать это не через файловый дескриптор (например, chmod() vs fchmod() или utimes() который не может быть выполнен с помощью дескриптора файла)).

    Interesting Posts

    Переформатируйте или отформатируйте F10 из меню запуска файла окна в Xfce

    Какая прошивка работает с D-Link DIR-600?

    CheckInstall не установлен на Debian

    Копировать столбец с именем файла в качестве заголовка столбца

    rsync создает каталоги с тем же именем внутри папки назначения

    Разбор строки в строковой литературе в оболочке

    Установленные шрифты не отображаются, Linux Mint 15 64bit

    Может ли один компьютер использоваться двумя пользователями одновременно с помощью двух мониторов?

    Как я могу сопоставить устройство ttyUSBX с последовательным устройством USB

    ps aux | grep 'asdf' grep: asdf: нет такого файла или каталога

    Изменить размер раздела / home и переместить / var / www в новый раздел

    Можно ли просматривать изменения разрешений путем сравнения файлов с резервной копией?

    установить цвет conky

    Как размножить файл данных с другим файлом данных индекса?

    Получение услуги на виртуальной машине с приватным адресом

    Linux и Unix - лучшая ОС в мире.