Вы не используете grep. Используйте awk
.
"your data" | awk '$1 ~ /\.[05]00/'
Не очень эффективно, но можно сделать:
find /folder/downloading -type f -exec sh -c '
for file do
lsof -F a "$file" | grep -q w || mv "$file" /folder/downloaded
done' sh {} +
То есть проверить, что файл отсутствует в списке с w
обрядом a
режим доступа в l
is
t of o
pen f
files перед m
ov
ing.
psmisc
реализация fuser
, которая обычно используется в операционных системах на базе 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()
, что невозможно сделать через дескриптор файла)).