Итак, моя музыкальная коллекция живет на моем сервере 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)
Спасибо за ваш вклад.
У тебя нет (веских) причин, чтобы картинки могли быть выполнены.
Просто запустите эту команду, чтобы исправить их:
find /space/music -name "*.jpg" -exec chmod -x {} +
Бонус:
find /space/music -type d -exec chmod o-w {} +
Объяснение:
Большая часть командной строки не требует пояснений. Единственная часть, которая нуждается в некотором понимании - это конец. {}
заменяется именем найденных файлов (соответственно каталога), которые соответствуют фильтру. Обычно команда find заканчивается защищенной точкой с запятой \;
.
Однако это неэффективно, так как команда запускается один раз для каждого файла / каталога.
Существует хорошо известный обходной путь, который направляет вывод find
в xargs
, который объединяет имена файлов до максимально допустимой командной строки, но возникает проблема, когда путь содержит пробелы, что становится все более и более распространенным даже в мире Unix / Linux.
Снова обходной путь, основанный на специфических расширениях GNU, позволяет правильно обрабатывать эти случаи. Я выбираю более простой подход, используя POSIX (чтение с переносом), чтобы иметь возможность строить из себя длинные командные строки, то есть {}
заменяется набором имен файлов до максимально допустимого числа.