как я могу рекурсивно запустить chmod -x?

Итак, моя музыкальная коллекция живет на моем сервере 12.04.2. Эта коллекция на протяжении многих лет путешествовала со мной с компьютера с Windows на MacBook Pro, а затем, наконец, туда, где она сейчас находится на сервере.

Я заметил, что по какой-то причине все мои «folder.jpg» (фотографии на обложке) подсвечиваются зеленым на терминале (сигнализируя, что они исполняемые). если я запущу chmod -x folder.jpg, терминал отобразит их светло-фиолетовым цветом (сигнализируя о том или ином виде медиа-файла). Теперь я не беспокоюсь о цвете как таковом, но у меня есть два вопроса. а) Почему моим .jpgs дают исполняемый бит? (Возможно, из-за винды с ними, я уверен), и б) как я могу рекурсивно запустить chmod -x *.jpg с вершины моей музыкальной иерархии?

Когда я пытаюсь chmod -R -x *.jpg с верхнего уровня, я получаю:

mediausr@MediaSRV:/space/music$ chmod -R -x *.jpg
chmod: cannot access `*.jpg': No such file or directory

Бонусный вопрос: Все папки окрашены для «других доступных для записи», в то время как новые папки, которые я создаю, правильно окрашен для «каталога». Я совсем не волнуюсь по этому поводу, поскольку это не связано с тем, что вещи исполняются, но вы знаете, если бы кто-то мог просветить меня о рекурсивном способе заставить систему видеть их как прямые каталоги, это было бы здорово. : 0)

Спасибо за ваш вклад.

0
задан 2 August 2013 в 00:26

1 ответ

У тебя нет (веских) причин, чтобы картинки могли быть выполнены.

Просто запустите эту команду, чтобы исправить их:

find /space/music -name "*.jpg" -exec chmod -x {} +

Бонус:

find /space/music -type d -exec chmod o-w {} +

Объяснение:

Большая часть командной строки не требует пояснений. Единственная часть, которая нуждается в некотором понимании - это конец. {} заменяется именем найденных файлов (соответственно каталога), которые соответствуют фильтру. Обычно команда find заканчивается защищенной точкой с запятой \;.

Однако это неэффективно, так как команда запускается один раз для каждого файла / каталога.

Существует хорошо известный обходной путь, который направляет вывод find в xargs, который объединяет имена файлов до максимально допустимой командной строки, но возникает проблема, когда путь содержит пробелы, что становится все более и более распространенным даже в мире Unix / Linux.

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

0
ответ дан 2 August 2013 в 00:26

Другие вопросы по тегам:

Похожие вопросы: