Я сделал резервную копию на диске NTFS, и эта резервная копия действительно оказалась необходимой. Однако диск NTFS испортил разрешения. Я хотел бы восстановить их до нормального без ручного исправления каждого файла.
Одна проблема заключается в том, что внезапно все мои текстовые файлы получили разрешения на выполнение, что неправильно. Итак, я попробовал:
sudo chmod -R a-x folder\ with\ restored\ backup/
Но это неправильно, так как удаляет x
разрешение из каталогов, что делает их нечитаемыми.
Какова правильная команда в этом случае?
permissions
executable
recursive
gaazkam
источник
источник
Ответы:
В
-x
удаляет права на выполнение для всех добавит права на выполнение для всех, но только для каталогов.+X
источник
chmod -R -x+x *
chmod -R -x * && chmod -R +X *
Хорошо, я перечитал справочные страницы "chmod" для Mac OS X, BSD и Linux и провел несколько экспериментов. Вот что я узнал о символических режимах. Это может быть сложно, но это стоит понять:
Так, например,
a+x
сделал бы файл исполняемым всеми.a+X
сделает файл исполняемым всеми, если он исполняется кем угодно.a+x
сделает каталог доступным для поиска всеми.a+X
также сделает каталог доступным для поиска всеми.Основное различие между BSD и Linux заключается в том, что с BSD определение выполняется на основе прав доступа к файлу до выполнения chmod. При использовании Linux определение выполняется непосредственно перед выполнением предложения + X.
Таким образом, в случае BSD комбинация
a-x,a+X
уберет разрешение на выполнение / поиск, а затем сделает каталог доступным для поиска для всех и сделает файл исполняемым для всех. если он изначально был исполняемым кем-либо.С Linux,
a-x,a+X
удаляет разрешение на выполнение / поиск, а затем делает каталог доступным для поиска для всех, оставляя файл исполняемым никем.Вот конкретный пример: на компьютере BSD: каталог, исполняемый файл и неисполняемый файл:
Обратите внимание, что как каталог, так и «fie» выполняются / доступны для поиска пользователем, но не другими.
Сейчас мы выполняем
chmod a-x,a+X *
. В первом предложении для всех файлов будет удален бит выполнения / поиска для всех пользователей, а во втором предложении он будет добавлен обратно как для "fee", так и для "fie". "fee", потому что это каталог, и "fie", потому что у него был хотя бы один исполняемый бит для начала.У меня был тот же результат выполнения
chmod -x+X
.Вывод: решение Jak Gibb будет работать на Linux, но для BSD вам нужно будет сделать два прохода.
Я не проверял это на SVr4 или других вариантах Unix.
источник
Один из способов сделать это:
источник
chmod a-x {}
chmod a-x {}
также может в конечном итоге удалить разрешения, которые вы не хотите изменять, и он может оставить файлы для записи во всем мире. Дело в том, что 0644 - это «в целом разумный» компромисс. ОП должен, конечно, также задействовать мозг, прежде чем применять решения из Интернета на своем компьютере.chmod
. Если файлы резервных копий содержат скрипты и двоичные файлы, удалениеx
из них является неправильным. Еслиchmod
предыдущие разрешения равны 0777,chmod a-x
они все равно останутся 0666, что, вероятно, не то, что вам нужно. Я говорю, чтоchmod 0644
лучше эвристика, а неchmod a-x
так.Отменяет разрешение на выполнение для файлов, которые не относятся к каталогу типа (как вы просили) или символической ссылке ( символические ссылки обычно всегда rwxrwxrwx и
chmod
влияют на назначение символической ссылки на них).Обратите внимание, что:
изменил бы только разрешение обычных файлов. Это исключает каталоги и символические ссылки , но также устройства , именованные каналы , сокеты и, возможно, другие, в зависимости от системы (хотя в случае с OP при резервном копировании файловой системы NTFS они вряд ли будут присутствовать).
источник
В zsh используйте спецификатор glob
.
для сопоставления только обычных файлов (не включая символические ссылки) иD
для сопоставления файлов точек:Если командная строка слишком длинная, вы можете использовать
zargs
:источник