Когда я подключаю USB-флешку (FAT) к компьютеру Mac или Ubuntu, все файлы имеют установленные исполняемые биты. После копирования структуры каталогов на мой жесткий диск, как я могу рекурсивно удалять исполняемые биты только из файлов и сохранять их в каталогах?
73
Ответы:
С GNU
chmod
(в Ubuntu) вариант с одной командой (начиная с текущего каталога):Объяснение:
-R
- работать рекурсивно-x
- удалить исполняемые флаги для всех пользователей+X
- установить исполняемые флаги для всех пользователей, если это каталогВ этом случае заглавная
X
применяется только к каталогам, потому что все исполняемые флаги были очищены-x
. В противном случае+X
устанавливает исполняемый флаг (ы) также, если флаг был изначально установлен для любого из пользователей, групп или других.С BSD
chmod
(который присутствует в Mac OS X) вы должны сделать это отдельно двумя командами:(Если вы также хотите включить скрытые файлы в основной каталог, вам, вероятно, нужно изменить * на. (Точка), но это не проверено.)
источник
chmod -R a-x+X *
umask
нетx
разрешения для всех. Вы используете по умолчаниюumask
или вы его изменили? Не могли бы вы выслать выводumask
команды? Помимо вашего решения есть также такая возможность:chmod -R a-x,+X *
которая будет устанавливатьx
разрешение в соответствии с вашимиumask
. Я обновлю ответ, но сначала я хотел бы проверить поведение в BSD / Mac OS X.find
вариант в ответе ниже, потому что это стиль комбинирования простых инструментов, которые делают One Thing Well..
вместо,*
если вы хотите, чтобы это было применено ко всем файламЕсли вы сначала перейдете на правильный путь:
или же
Поиск находит все файлы типа 'f' (что означает обычный файл) в пути. и затем вызывает chmod -x для каждого файла. {} Подставляется вместо имени файла и \; завершает команду chmod.
источник
find
поддерживает это, используйте-exec ... \+
вместо-exec ... \;
- это потребует меньшеfork
+exec
s. Если это не так, используйтеfind ... -print0 | xargs -0 ...
.find . -type f -perm +111 -exec chmod -x {} \;
find
поддерживаете,-print0
я уверен, что он также будет поддерживать-exec
Под Linux и Unix в окне терминала или в Mac OS X используйте это в Terminal.app:
источник
chmod -x+X
Способ не работает для меня на убунте либо, поэтому я написал этот минимальный питон скрипт:Если в вашей файловой системе могут быть какие-то дополнительные вещи, такие как сокеты, вы можете захотеть окружить последний chmod командой try / catch.
источник