Вопрос `rm -rf ...` зависает в большой директории [duplicate]


На этот вопрос уже есть ответ:

Используя Ununtu 12.04 и недавно получил сообщение о том, что дисковое пространство заканчивается. Запустите анализатор использования диска, который застыл. После некоторых исследований я вижу каталог в ~ называемый «9fybsyiikg», который составляет 1065357312 байт.

Я попытался открыть эту папку в диспетчере файлов, и ничего не происходит. Я пытался lsи ничего не происходит.

И затем я попробовал rm -rf 9fybsyiikg, и ничего не происходит.

Любые идеи, чем может быть этот каталог, и как избавиться от него?


2
2018-03-17 16:18


происхождения


AFAIK, существует ограничение на файл для rm для работы. Если это выше предела, то rm будет отображаться ошибка. Кстати, попробуйте ли ls -l | more перечисляет его ?? - AzkerM
Это звучит так, будто что-то серьезно испортило вашу систему ... - w4etwetewtwet
@AzkerM лимит, о котором вы думаете ARG_MAX (видеть Вот), и он не должен применяться здесь, если ОП не пытается rm ~/9fybsyiikg/* - terdon♦
@Rmano, почему релевантные ссылки? ОП пытается rm -r каталог, все в нем (включая символические ссылки, но не их цели) будут удалены. - terdon♦
@AzkerM нет необходимости в xargs! Особенно не так, он будет разбит на любые странные имена файлов. В системах GNU используйте find -delete, или -exec rm {} +, Если вы действительно хотите использовать xargs делай это так: find -print0 | xargs -0 -I {} rm -rf, - terdon♦


ответы:


rm команда займет некоторое время, если вы не получите никаких ошибок, просто дайте ей запустить. Если вы получаете ошибки, попробуйте некоторые из этих решений:

  1. find

    find ~/ -maxdepth 1 -name 9fybsyiikg -delete
    
  2. rm и подождите, это может занять некоторое время (да, я знаю, что вы это пробовали, но это могло бы помочь другим)

    rm -rf ~/9fybsyiikg
    
  3. У вас может быть слишком много файлов, попробуйте это

    find  ~/9fybsyiikg -delete && rmdir ~/9fybsyiikg
    
  4. Если все остальное не удается, используйте некоторую магию Perl:

    perl -e 'use File::Path; rmtree "$ARGV[0]"' ~/9fybsyiikg
    

    объяснение

    • -e : запустить скрипт, переданный в командной строке

    • rmtree : команда из модуля File :: PAth, которая удаляет целые деревья каталогов


2
2018-03-17 16:28



Если я правильно понял, и проблема в BleachBit (как кажется) - эта программа создала файл для каждого небольшого свободного места на диске, чтобы перезаписать его и удалить его по соображениям безопасности. Вероятно, он разбился посередине и оставил миллионы крошечных файлов, нанесенных на весь диск в этом каталоге ... так что это в основном упражнение в терпении ;-). Даже почти невозможно ls из find это, учитывая размер ... - Rmano
@terdon, почему perl или find будет быстрее, чем rm? Этот парень довольно убедителен: askubuntu.com/a/114970/334825... - Ohad Schneider
@OhadSchneider Я думал о случаях, когда rm (я думаю?). По правде говоря, 3 года подряд, этот комментарий не имеет для меня большого смысла. Я не могу честно сказать, что помню, о чем я думал, и кажется, что я просто ошибался, поэтому я удалю. Благодарю. - terdon♦
@terdon Я могу полностью связать, когда я прочитал несколько своих сообщений за несколько лет назад, я думаю, «кто такой идиот» :) ИМХО вам следует просто удалять варианты (3) и (4) выше с вашего поста, поскольку они кажутся предложить, чтобы они могли работать в тех случаях, когда rm -rf(особенно если в папке также есть файлы с файлами), и я не встречал никаких доказательств, подтверждающих это (включая, к сожалению, недавний личный опыт). - Ohad Schneider
Ах, нет, я не был что неправильно;) И 3, и 4 хорошо избегают проблемы ARG_MAX. Подумайте о них как о альтернативах rm foo/* не rm - rf foo, - terdon♦