16:02 

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

Комментарии
2018-03-23 в 16:31 

J.Random
ಠ-ಠ
man fuser

2018-03-23 в 16:40 

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

2018-03-23 в 16:51 

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

2018-03-23 в 16:55 

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

2018-03-23 в 16:59 

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

2018-03-23 в 17:13 

кракозябрик
сабж со стажем
Trotil, вроде работает, спасибо *_*
надо потестить несколько дней

2018-03-25 в 00:43 

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

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

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

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

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

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

2018-03-25 в 07:28 

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

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

в этих файлах нет пробелов

2018-03-25 в 13:40 

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

2018-03-25 в 14:00 

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

2018-03-25 в 16:19 

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

2018-03-25 в 16:33 

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

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

2018-03-25 в 16:37 

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

2018-03-25 в 16:39 

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

2018-03-25 в 16:41 

ehlo_kitty
не пони мемаса сорян

2018-03-25 в 21:57 

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

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

2018-03-26 в 05:58 

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

2018-03-26 в 06:04 

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

2018-03-26 в 06:09 

ehlo_kitty
вы это кому и зачем написали?

2018-03-26 в 06:17 

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

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

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

2018-03-26 в 15:15 

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

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

2018-03-26 в 22:19 

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

Комментирование для вас недоступно.
Для того, чтобы получить возможность комментировать, авторизуйтесь:
 
РегистрацияЗабыли пароль?

Помощь @экспертов – Хард и софт

главная