16:02

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

Комментарии
23.03.2018 в 16:31

ಠ-ಠ
man fuser
23.03.2018 в 16:40

сабж со стажем
J.Random, если вы хотите помочь то боюсь вам придётся сказать "бэ", я очень плохо соображаю в линуксе и почитав информацию об этой программе, ничего не понял.
23.03.2018 в 16:51

for i in `ls`; do if test -z `lsof -w -t $PWD/$i`; then rm $i; fi; done;
Код не проверял.
23.03.2018 в 16:55

сабж со стажем
Trotil, кошмар как это классно и сложно выглядит О_О
а куда здесь вставить путь до папки с файлами и маску по расширению? типа *.JPG?
23.03.2018 в 16:59

Если нужна маска, лучше вместо ls использовать find /path -name '*.JPG' -maxdepth 1
23.03.2018 в 17:13

сабж со стажем
Trotil, вроде работает, спасибо *_*
надо потестить несколько дней
25.03.2018 в 00:43

Отвечая на ваши вопросы по порядку:

> можно ли в линуксе удалить файлы кроме занятых?
Да.

> то есть какие-то ключи к rm
Нет.

При этом неясно что вы на самом деле понимаете под "занятыми". Открытый файловый дескриптор файл никак не занимает, это не шиндошс. Когда вы удаляете открытый в данный момент файл, на самом деле он удалится после того как дескриптор освободится.

Опишите задачу более подробно, есть мнение что вы хотите странного.

> for i in `ls`; do if test -z `lsof -w -t $PWD/$i`; then rm $i; fi; done;
Это ололо-уровень мамкиного хакира. Дёргать весь лсоф с явно зашитым $PWD на каждую итерацию? Разворачивать прям в комстроку? Вообще не кавычить переменные? Махать рукой на файлы с пробелом в имени? Переделывайте.
25.03.2018 в 07:28

сабж со стажем
Trotil,
ну оно короче исправно удаляет ненужные файлы. не знаю пропускает ли занятые. будем надеятсья что да) ещё раз спасибо :3

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

в этих файлах нет пробелов
25.03.2018 в 13:40

я бы поработал над этим вот "сбоем" например. расскажите подробнее как организован ваш процесс создания и обработки. ну то есть если вам конечно интересно.
25.03.2018 в 14:00

сабж со стажем
это не моя программа, я с автором долго переписывался, слал ему логи, но у него ничего такого не возникает а у меня возникает и хз почему. он встроил удалялку для этих файлов в софтину но через несколько версий забил/забыл и файлы опять стали накапливаться. мне уже неудобно его парить по этому поводу поэтому я решил выкручиваться сам.
25.03.2018 в 16:19

опишите подробнее. что за "сбой", почему после него надо удалять файл и т. д.
25.03.2018 в 16:33

сабж со стажем
если бы я знал что это за сбой, автор проги бы его устранил и мне не пришлось бы всё это спрашивать)

файлы надо удалять потому что место на диске ограничено. и потому что сбойные файлы, бесконечно размножаясь, начинают тормозить файловую систему и работу программы.
25.03.2018 в 16:37

как выглядит сбой? что при этом происходит с файлами? сбой в первой программе или во второй? почему я должен вам задавать все эти вопросы? что мешает рассказать про ситуацию подробнее самостоятельно?
25.03.2018 в 16:39

сабж со стажем
что мешает рассказать про ситуацию подробнее самостоятельно?
ДИВАНОН
25.03.2018 в 16:41

не пони мемаса сорян
25.03.2018 в 21:57

ehlo_kitty, "lsof -t file" ищет в /proc до первого совпадения - это минимум возможных действий. fuser читает весь /proc.

"Сбой" - видимо, программа падает.
В таком случае помогает причину помогает найти gdb, backtrace в момент падения, и точки останова выше по стеку. Нужен некоторый опыт.
26.03.2018 в 05:58

минимум действий -- это один раз посмотреть в лсоф. когда программа падает обычно можно это обработать прям на месте, что на мой взгляд идея получше чем вообще думать открыт ли файл.
26.03.2018 в 06:04

Утро вечера мудренее. PID программы, как позже выяснилось, известен.
Следовательно, список открытых файлов можно увидеть командой ls -l /proc/PID/fd, где PID - process id программы.
26.03.2018 в 06:09

вы это кому и зачем написали?
26.03.2018 в 06:17

Автору может помочь:

find /path/to/files -mtime +2 -exec rm {} \;

удалить файлы старше двух дней.
26.03.2018 в 15:15

сабж со стажем
так ведь работает же Т_Т

или вы хотите сказать что не работает? или работает не так как надо?
26.03.2018 в 22:19

я хочу сказать что можно подобно даунхиллу жить с велосипедами и костылями, а можно без них. "работает" это один из критериев, но если других у вас нет, то можно конечно считать вопрос решённым.