У меня есть папка с 137795 файлами. Мне нужно удалить их все. Когда я запускаю, rm *
я получаю -bash: /bin/rm: Argument list too long
. Как мне обойти эту ошибку?
решение1
Как я вижу, вам не нужно удалять ваш каталог, только файлы внутри. Так что вы можете создать его заново
rm -r /path/to/dir && mkdir /path/to/dir
или даже удалить только файлы внутри
find /path/to/dir -type f -delete
первый вариант работает быстрее.
UPD. Обратите внимание, что способ с find
может быть не оптимальным с точки зрения потребления места, так как размер каталога будет уменьшен только после fsck
.Подробности.
решение2
Обходной путь №1:
find /path/to/dir -delete
Обходной путь №2:
rm a*;
rm b*;
rm c*;
etc
решение3
Использование find
, вероятно, является лучшим вариантом. Некоторые проблемы с другими ответами либо не удаляют все внутри каталога, либо удаляют сам каталог. Вы можете использовать либо ls
с xargs
, если нет специальных символов, либо find
с определенными параметрами.
ls -1 | xargs rm -r
или
find . -depth -path ./.* -prune -o -not -name . -delete
Это проигнорирует все в текущем каталоге, начинающееся с .
( -prune
), и удалит любой другой файл или каталог, если только это не верхний каталог ( .
). -depth
Сначала будет выполнен поиск внутри каталогов, что позволит избежать ошибки «каталог не пуст». Если аргумент -not
недоступен в вашей системе, используйте !
.