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

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

  • Проверяет наличие статуса выхода, отличного от 0, после команды `command || return` недостижимый?
  • В чем разница между ] и ?
  • удалите строку, если та же строка существует в предыдущей строке
  • Замените все вхождения символа в переменной с помощью скрипта korn
  • Почему эти вложенные параметры в сценарии оболочки POSIX разделены словом?
  • Хранение сценариев оболочки
  • Сценарий, который удаляет нежелательные символы из переменной
  • Простой скрипт установки говорит, что он не может найти пакет
  • Сортировка одного файла по строке на основе другого файла
  • Escape whitespace в поиске для pdftk без xargs -J
  • Может ли libnotify использоваться для выполнения скрипта?
  • Как я могу использовать несколько операторов if внутри другого if инструкции awk-программы?
  • Linux и Unix - лучшая ОС в мире.