Я повинен видалити 200 000 файлів (усіх) із папки, і я не хочу видаляти саму папку.
використовуючи rm, я отримую помилку "Аргумент занадто довгий". Я намагався щось зробити з xargs, але я не Shell Guy, тому це не працює:
find -name * | xargs rm -f
Я повинен видалити 200 000 файлів (усіх) із папки, і я не хочу видаляти саму папку.
використовуючи rm, я отримую помилку "Аргумент занадто довгий". Я намагався щось зробити з xargs, але я не Shell Guy, тому це не працює:
find -name * | xargs rm -f
Відповіді:
$ find /path/to/folder -type f -delete
-delete
. Це також дозволяє уникнути проблем з файлами, що містять лапки або символи нового рядка (хоча ви можете використати параметри пошуку -print0
GNU та GNU xarg, -0
щоб виправити це).
xargs
тим часом find
має -exec command {} +
синтаксис.
Ви все робите правильно. Саме «*» викликає проблему (оболонка розширює її у список файлів замість 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
Наступна команда видалить усі файли з поточного каталогу:
find . -type f -exec rm {} \;
-name '*'
не означає "всі файли". Файли говорять:-type f
Кудо на кванти відповідають, ось кілька доповнень.
Якщо ви хочете видалити файли з певним шаблоном імен, ви можете записати його так. Також додано -print, щоб ви могли бачити, що відбувається під час видалення файлів.
sudo find /home/mydirectory -name "*.jpg" -type f -print -delete
Наприклад, видаляється всі jpegs у моєму каталозі.