Удалите эти надоедливые файлы .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» на «человека, которого нужно убить». И вы увидите, что требование «только» далеко не очевидно.
Николас Барбулеско

Ответы:



12

Баш *, 40 30

find / -name .DS_Store -delete

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

Это должно справиться с этим (не очень игра в гольф, не замечательно медленно). Bash кажется правильным, потому что нам не приходится иметь дело с какой-то ерундой "системы импорта". Если вы хотите требовать выполнения в любой среде, добавьте 4 символа для bashи 1 для перевода строки.

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


1
Bash - именно то, что нужно для этого.
Йоханнес Кун

1
Что за findOS X? С GNU findеще короче find / -name .DS_Store -delete.
Манатворк

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

1
Вы не делаете ничего специфичного для bash, так что это может быть и sh.
Питер Тейлор

10
Он удалил мой .DS_Storeкаталог, где у меня были важные вещи.
Конрад Боровски,

9

Рубин: 38 33 персонажа

File.delete *Dir['/**/.DS_Store']

2
Dir[...]это ярлык для Dir.glob(...), это сэкономит вам 5 символов.
Патрик Осцити

3
Argh! Я знал, что есть более короткий путь, но я искал его Kernel. Спасибо, @padde.
manatwork

2

рыба, 16

rm /**/.DS_Store

(Сделайте это 19, если -fтребуется удалить .DS_Storeв каталогах только для чтения.)


0

Shell, 25

locate .DS_Store|xargs rm

Требуется рабочая locateбаза данных.


3
Также требуются пути без пробельных символов.
manatwork


0

CMD, 17

del/s "/.DS_Store

Довольно просто.

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


-1

найти, 38

Прежнее findрешение совершенно неверно: оно означает удаление всего названного, .DS_Storeвключая каталог, ссылки, специальный файл и т. Д.

Но:

find / -type f -name .DS_Store -delete

это минимальное использование решения find.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ : Я настоятельно рекомендую не использовать это решение для реального * nix-бокса: попытка рекурсивного удаления чего-либо /- очень плохая идея. Вы предупреждены.

РЕДАКТИРОВАТЬ :

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

РЕДАКТИРОВАТЬ 2 : Еще более актуально: ОП написал: «Код должен удалять только соответствующие файлы .DS_Store и ничего больше». Таким образом, если кто-то хочет прочитать скучные требования, все решения, которые удаляют больше, чем эти файлы, выглядят забавно, умно и т. д. но неправильно .


Предыдущее findрешение верное. В вопросе говорится «удалите любой файл с именем« .DS_Store »». Таким образом, нет особых требований, основанных на типе файла.
manatwork

@ manatwork: ерунда: файл отличается от каталога. Вдоль вашей витой линии лучшим решением по-прежнему является rm -rf /
DavAlPi


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

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