Я должен удалить 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.