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

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

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

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

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() который не может быть выполнен с помощью дескриптора файла)).

  • Как я могу разобрать xml-файл с URL-адреса http без загрузки файла и распечатать нужную строку?
  • Проблемы со сценарием оболочки каталога
  • Как запросить ввод от пользователя из переменной или массива bash?
  • Выполнение сценария оболочки с удаленного сервера на локальной машине
  • Инструменты и стратегии для анализа устаревшего приложения на основе сценариев оболочки
  • Проблемные цитаты
  • «History» перестает работать при запуске внутри сценария bash
  • В каких файлах init level / etc / profile или / etc / environment читаются?
  • Создайте несколько имен пользователей и UID в Linux с помощью сценария оболочки
  • Как сгенерировать много (пустых) файлов изображений?
  • Как я должен обрабатывать shebang при написании моей собственной оболочки?
  • Interesting Posts

    Снимки с большими изменениями файлов

    Не удается получить экран входа в GUI на Debian Jessie

    Как процесс обрабатывает ситуацию, когда он не находит памяти для использования?

    Поддержка SDcard в Linux для устройства чтения карт памяти ENE Flash UB6250 (найдено на Acer Aspire One 522)

    Photoshop CS5 в Fedora 15

    Условие оболочки C Shell, если строка содержит символ новой строки

    chroot всей файловой системы, за исключением одного файла

    материал в кавычках скрыт в сообщении об ошибке компиляции для gcc?

    Проблемы с беспроводной usb-мышью на slackware

    AIX – использовать встроенные функции ksh для освобождения памяти, когда fork невозможно

    Как правильно остановить процесс оболочки busybox и дочерний процесс?

    копировать файлы, измененные после определенной даты с помощью cp-переключателей

    Единый каталог только для чтения

    Debian: невозможно активировать Wi-Fi на HP Pavilion Dm1-4055sg (с Broadcom BCM4313)

    Настройка устройства alsa по умолчанию (hw: 0,0) в asoundrc

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