Вам придется удалить завершающую новую строку из q
, например. q = q.strip()
.
Кроме того, вам придется продумать, что произойдет, если запущено более одного vlc
.
Проблема не в размере удаляемых объектов, а в их количестве.
Независимо от того, пытаетесь ли вы:rm -rf *
или, в вашем скрипте, for i in "$1"/*;do
:, оболочке необходимо расширить *, и это приводит к просмотру тысяч путей к файлам, а также к размещению в памяти. Когда число слишком велико, он будет либо очень медленным, либо просто завершится ошибкой (и отобразит сообщение об ошибке ).
Вы должны упростить и просто:rm -rf "${1:-missing_directory_name}"
в своем скрипте, как единственную команду, непосредственно :rm сам будет обрабатывать обнаружение подфайлов.
Другой способ — использовать find "${1:-missing_directory_name}" - type f -depth -print0 | xargs -0 -n 100 rm
, вызывая rm каждый раз, когда find выдает 100 имен файлов, тем самым ограничивая количество аргументов, добавляемых к rm, независимо от точного количества файлов. А затем еще одна находка, например,:find "${1:-missing_directory_name}" -type f -depth -print0 | xargs -n 100 rmdir
для rmdir оставшихся каталогов, начиная с «самых глубоких», избегая попыток сначала удалить непустой -каталог. (но первое решение делает все это с 1 пм и может оказаться наиболее эффективным в итоге)
Во время работы скрипта вы можете сделать в другом окне терминала :несколько:df -i directory_name
и увидеть, как количество инодов быстро уменьшается по мере удаления файлов в каталоге. (df -i будет отображать все индексные дескрипторы файловой системы, содержащей имя каталога _, поэтому, вероятно, оно не будет заканчиваться на 0, поскольку другие файлы этой файловой системы могут находиться в других каталогах или в родительском каталоге (с ).
Существует множество других способов (недавней находки, у вас есть другие способы не использовать xargs и т.д. ).
Идея остается прежней. :Не используйте расширение оболочки, если количество расширяемых файлов слишком велико.