Як видалити багато (200 000) файлів?


17

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

використовуючи rm, я отримую помилку "Аргумент занадто довгий". Я намагався щось зробити з xargs, але я не Shell Guy, тому це не працює:

find -name * | xargs rm -f

5
Чому папку не видалити та не відтворити її після видалення?
garconcn

Відповіді:


35
$ find /path/to/folder -type f -delete

15
Напевно, варто згадати, що GNU find (як використовується у більшості дистрибутивів Linux) може видаляти файли самостійно, використовуючи -delete. Це також дозволяє уникнути проблем з файлами, що містять лапки або символи нового рядка (хоча ви можете використати параметри пошуку -print0GNU та GNU xarg, -0щоб виправити це).
DerfK

3
@DerfK, приємне зауваження! Крім того, багато ppl мають тенденцію грати з xargsтим часом findмає -exec command {} +синтаксис.
poige

5

Ви все робите правильно. Саме «*» викликає проблему (оболонка розширює її у список файлів замість the 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

1
Це не працює, якщо у вас є ім'я файлу, що містить пробіл.
користувач9517

@lain: Так, я щойно закінчував редагування своєї відповіді, щоб включити фокус для пробілів :-)
dtoubelis

3

Наступна команда видалить усі файли з поточного каталогу:

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

2
-name '*'не означає "всі файли". Файли говорять:-type f
poige

2

Ви можете спробувати

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

або

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

1

Кудо на кванти відповідають, ось кілька доповнень.

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

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

Наприклад, видаляється всі jpegs у моєму каталозі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.