Ответы:
Если вы не можете удалить каталог, вы всегда можете использовать поиск.
find . -maxdepth 1 -type f -exec rm -f {} \;
Это удалит все файлы в текущем каталоге, и только текущий каталог (не подкаталоги).
find dir/to/delete -delete
(не порождает rm
процесс на файл для удаления).
find dir/to/delete -type f -delete
находить . -maxdepth 1 -тип f -exec rm -f {} \;
это просто занимает слишком много времени (один исполняемый файл rm на файл).
этот гораздо эффективнее:
находить . -maxdepth 1 -тип f -print0 | xargs -r0 rm -f
так как он принимает столько имен файлов, сколько аргументов для rm, сколько это возможно, затем запускает rm со следующей загрузкой имен файлов ... может случиться, что rm вызывается только 2 или 3 раза.
ionice
непосредственно перед этим rm
является хорошей идеей, если компьютер используется другими людьми одновременно.
Оба они обойдут проблему. Существует анализ соответствующей работы каждого метода над здесь .
find . -name WHATEVER -exec rm -rf {} \;
или
ls WHATEVER | xargs rm -rf
Проблема связана с расширением bash расширением "*" с помощью элемента everysingle в каталоге. Оба эти решения работают через каждый файл по очереди вместо этого.
find . -print0 | xargs -0 rm
).
ls *
", и " *
" расширяется до списка аргументов, который ваша оболочка жалуется на слишком длинный ls .
Вместо этого используйте " " (или поднимитесь на один уровень вверх и сделайте " ls [dirname]
").
Я смог сделать это, сделав резервную копию одного уровня:
cd ..
И работает:
rm directory name -rf
А затем пересоздать каталог.
Все эти вызовы find очень хороши, но я редко помню, какая именно номенклатура нужна, когда я спешу: вместо этого я использую ls. Как кто-то упоминает, лс. будет работать, но я предпочитаю ls -1, как в:
лс -1 | xargs -n 100 rm -rf
Значение -n xxx довольно безопасно для игры, так как превышение максимального значения будет либо автоматически исправлено (если превышен размер-максимум; см. -S), либо если превышено значение args-max для приложения, обычно оно будет довольно очевидно.
Следует отметить, что grep удобно вставлять в середину этой цепочки, когда вы хотите удалить только подмножество файлов в большом каталоге, и по какой-либо причине не хотите использовать find.
Этот ответ предполагает, что вы используете основные утилиты Gnu для своих ls, xargs и т. Д.
Вот версия для удаления большого количества файлов, когда система должна оставаться отзывчивой.
Он работает, выпуская работу небольшими партиями (по умолчанию 100 файлов) и немного ожидая завершения других заданий.
Отлично сработало для удаления более полумиллиона файлов из одного каталога на ext3. Процент отпечатков сделан в виде небольшого бонуса
noOfFiles=`ls -U | wc -l`
n=0
while (ls -U | tail -n 100 | xargs rm -f); do
n=$((n+100));
sync;
echo -en "$((n*100/noOfFiles))%, ($n of $noOfFiles)\r";
sleep 5;
done
Решает ошибки "слишком длинный аргумент" или "невозможно выделить память"
Это помогло 220 000+ файлам в папке сессий ....
Преимущество: мгновенно начинает удалять файлы
CD путь / в / папку
ls -f | xargs rm -f -v
Нажмите на снимок экрана с удаляемыми файлами - (удалили все файлы за ~ 15 минут)
-f (после ls) удерживает от предварительной сортировки
-v (после rm) отображает каждый файл как удаляемый
-f (после rm) принудительно завершает работу без запросов на файлы, защищенные от записи
Совет: сначала переименуйте папку (ex session to session_old), чтобы предотвратить добавление дополнительных автоматически сгенерированных файлов, когда вы пытаетесь удалить файлы. Вы можете переделать исходный каталог вручную, если он не будет автоматически, как в моем случае