Видаліть ці примхливі файли ".DS_Store"


13

Якщо ви використовуєте OS X, то, можливо, ви знайомі з сумнозвісними прихованими ".DS_Store" файлами, які створюються в результаті використання Finder.

Завдання полягає в тому, щоб написати код, який буде проходити через всю файлову систему та видалити будь-який файл з назвою ".DS_Store".

Класичний код гольфу - найкоротший виграш коду.


Роз'яснення:

  • У коді не потрібно видаляти будь-які файли .DS_Store, для яких потрібен надрукувач; припустимо, що таких файлів не існує.

  • Код повинен тільки видалити відповідні файли .DS_Store і нічого іншого.


3
Чи потрібен код для видалення .DS_Store файлів, які потребують суперпользователя (мені потрібно викликати sudo)?
Кая

1
@Kaya Добре запитання: ні, не потрібно видаляти такі файли.
Аршаджій

27
Чи добре видаляти файли, не названі .DS_Storeтакож ؟
Джої Адамс

1
@JohannesKuhn Я б припустив, що остання редакція повинна була бути само собою зрозумілою. Я додав його заради повноти. Але я ціную розумну відповідь, тим не менше!
Аршаджій

1
@Joey - Перенесіть питання у військову сферу - наприклад, хм ... військові США, навмання ^^. І замініть "файл з назвою" .DS_Store "" на "людина, яка вбиває". І ви побачите, що вимога "тільки" далеко не очевидна.
Ніколя Барбулеско

Відповіді:


14

зш, 19

rm -f /**/.DS_Store

(Зробіть це 16, якщо це нормально, щоб залишити його -f.)


12

Баш *, 40 30

find / -name .DS_Store -delete

find / -name .DS_Store -exec rm -f {} \;

З цим слід впоратися (не дуже гольф, не. Домен дивно повільно). Баш здається правильним, тому що нам не доводиться мати справу з жодною дурницею "системи імпорту". Якщо ви хочете вимагати виконання в будь-якому середовищі, додайте 4 символи для bashта 1 канал для рядка.

* будь-яка оболонка, напевно, просто не може вийти із звички, якщо припустити, що оболонка Бурне є єдиною.


1
Bash - це саме правильний інструмент для цього.
Йоганнес Кун

1
Яку findОС має X? З GNU findще коротше: find / -name .DS_Store -delete.
манатура

1
У відповідності з «список аргументів занадто довгий» помилки і вимагає або bash4 або пізнішої версії з globstarопцією оболонки включена, або zsh: rm /**/.DS_Store.
манатура

1
Ви нічого не робите для конкретних башшнів, так що це може бути і ш.
Пітер Тейлор

10
Це видалило мій .DS_Storeкаталог, де у мене були важливі речі.
Конрад Боровський



0

Оболонка, 25

locate .DS_Store|xargs rm

Потрібна робоча locateбаза даних.


3
Також потрібні шляхи без символів пробілу.
манатура


0

СМД, 17

del/s "/.DS_Store

Досить прямо вперед.

/sпотрібен і для пошуку в підкаталогах.
"використовується для виходу із /знаку, який інакше трактується як (недійсний) аргумент.


-1

знайти, 38

Рішення previus явно findнеправильне: означає видалити все, що називається, .DS_Storeвключаючи каталог, посилання, спеціальний файл тощо.

Але:

find / -type f -name .DS_Store -delete

це мінімальне рішення з використанням find.

ВІДКЛЮЧЕННЯ : Я настійно раджу проти дійсного використання цього рішення на реальному * nix полі: намагатися видалити щось рекурсивно з /- це дуже погана ідея. Вас попереджають.

Редагувати :

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

EDIT2 : Ще важливіше: ОП написало: "Код повинен видаляти лише відповідні файли .DS_Store та більше нічого". : тож, якщо хтось дбає читати нудні вимоги, усі рішення, які видаляють більше, ніж ці файли, є смішними, розумними, тощо. але неправильно .


Попереднє findрішення є правильним. Питання говорить "видаліть будь-який файл з назвою" .DS_Store "". Тож ніяких особливих вимог, що базуються на типі файлу.
манатура

@ manatwork: нісенітниця: файл - це різна річ від каталогу. По твоїй крученій лінії найкращим рішенням все-таки є rm -rf /
DavAlPi


3
О, і інша річ: у гольф-коді мета полягає в тому, щоб отримати найкоротше рішення, тож якщо ви зможете зберегти кілька символів, відзначивши вимоги на свою користь, ну, так і нехай буде. Ви можете зберегти 8 символів, обробляючи все як файл, як це робить Unix. PS: де був сюрприз? Те, що деякі люди заперечують основний принцип UNIX?
Йоганнес Кун

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