Як використовувати термінал для видалення всіх .svn папок рекурсивно?


56

Яку команду можна ввести в термінал, щоб я міг видалити всі .svnпапки в папці (і з усіх підкаталогів), але не видалити нічого іншого?


Можливо, ви могли б просто svn export path/to/repo path/to/export/toзамість цього…
Jonny

Зауважте svn export, що це не копіювання файлів, які не входять до svn. Наприклад, я хотів це зробити для програми iOS, яка використовує какао-поді, де ми не робимо папку Pods. Потім це було пропущено з результатів. Я в кінцевому підсумку використав щось подібне до відповіді Річа на те, що хотів.
jackofallcode

Відповіді:


120
cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
  • Використовуйте знахідку, яка робить рекурсію
  • у поточному каталозі.
  • Файл - це каталог
  • ім'я файлу .svn
  • друкуйте відповідність до цього моменту (.svn dirs)
  • виконайте команду rm -rf (thing found from find). {} - заповнювач місця для знайденої сутності
  • the; повідомляє знайти, що команда для exec виконана. Оскільки шкаралупа також має уявлення про те, що; тобто вам потрібно уникнути цього за допомогою \, щоб оболонка не робила нічого особливого з ним, а просто переходить до пошуку

2
Гарне рішення. У той час як findє -deleteвона не буде видаляти непусті каталоги. Цей підхід є більш чистим, ніж наприклад, починаючи відповідати частинам усього шляху файлів.
Даніель Бек

13
Я рекомендую запустити його без -exec rm -rf {} \;першого разу, щоб переконатися, що він знаходить лише те, що ви хочете. У мене ніколи не було проблеми, де я випадково видалив неправильну річ, тому що я завжди перевіряю спочатку.
Роб

2
@ Добрий момент, я зазвичай роблю -exec echo rm -rf {} \; потім зніміть відлуння.
Багата Гомолка

Ще одним варіантом, якщо їх не так вже й багато, було б підтвердити видалення кожного файлу за допомогою-exec rm -ri {} \;
doovers

4
-exec rm -rf {} +ймовірно, у багато разів швидше, тому що не потрібно запускати занадто багато rmекземплярів. Натомість він запаковує максимальну кількість аргументів (каталоги, які потрібно видалити в цьому випадку) за один виклик. Це можливо, оскільки rmприймає кілька аргументів.
Даніель Б
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.