Назад | Перейти на главную страницу

Как удалить много (200 000) файлов?

Я должен удалить 200 000 файлов (все) из папки, и я не хочу удалять саму папку.

при использовании rm я получаю сообщение об ошибке «Список аргументов слишком длинный». Я пытался что-то сделать с xargs, но я не Shell Guy, поэтому это не работает:

find -name * | xargs rm -f
$ find /path/to/folder -type f -delete

Вы все делаете правильно. Это '*' это создает проблему (оболочка расширяет его в список файлов вместо find). Правильный синтаксис может быть таким:

cd <your_directory>; find . -type f | xargs rm -f
find <your_directory> -type f | xargs rm -f

(Последний вариант немного менее эффективен, так как он передает более длинные имена в xargs, но вы вряд ли заметите :-))

В качестве альтернативы вы можете избежать своего '*' вот так (однако в этом случае он также попытается удалить «.» и «..»; это не важно - вы просто получите небольшое предупреждение :-)):

find . -name '*' | xargs rm -f
find . -name "*" | xargs rm -f
find . -name \* | xargs rm -f

Если ваши имена файлов содержат пробелы, используйте это:

find . -type f -print0 | xargs -0 rm -f

Следующая команда удалит все файлы из ток каталог:

find . -type f -exec rm {} \;

можешь попробовать

find /path/to/folder -type f -print0  | xargs -0 rm -f

или

find /path/to/folder -type f -exec rm -f "{}" +

Престижность квантового ответа, вот некоторые дополнения.

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

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

Это, например, удаляет все jpeg-файлы в mydirectory.