Я хочу выполнить какое-либо действие (например, chown) во всех скрытых файлах в каталоге.
Я знаю, что это .* не очень хорошая идея, потому что он также найдет текущие . и родительские .. каталоги (я знаю, что rm не будет работать на . и .., но другие команды, включая chown и chmod, с радостью вступят в силу)
Но все мои скрытые файлы имеют разные имена!
Как я должен glob для всех скрытых файлов, исключая . и ..?
Вы можете использовать следующий шаблон extglob:
.@(!(.|))
. соответствует литеральному . сначала @() - это шаблон extglob, который будет соответствовать одному из шаблонов внутри, поскольку у нас есть только один шаблон внутри него, он выберет, что !(.|) является другим extglob шаблоном (вложенным), который соответствует любому файлу без одного или одного .; Поскольку мы уже сопоставили ., этот весь шаблон будет соответствовать всем файлам, начиная с ., кроме . и ... extglob включен в интерактивных сеансах bash по умолчанию в Ubuntu. Если нет, включите его сначала:
shopt -s extglob
Пример:
$ echo .@(!(.|))
.bar .foo .spam
Вы можете использовать следующий шаблон extglob:
.@(!(.|))
. соответствует литеральному . сначала @() - это шаблон extglob, который будет соответствовать одному из шаблонов внутри, поскольку у нас есть только один шаблон внутри него, он выберет, что !(.|) является другим extglob шаблоном (вложенным), который соответствует любому файлу без одного или одного .; Поскольку мы уже сопоставили ., этот весь шаблон будет соответствовать всем файлам, начиная с ., кроме . и ... extglob включен в интерактивных сеансах bash по умолчанию в Ubuntu. Если нет, включите его сначала:
shopt -s extglob
Пример:
$ echo .@(!(.|))
.bar .foo .spam
GLOBIGNORE=".:.."
, чтобы скрыть. и .. каталоги. Это также устанавливает параметр dotglob: * соответствует как скрытым, так и не скрытым файлам.
Вы также можете сделать
shopt -s dotglob
Gilles :)
Здесь вы можете использовать команду find. Например,
find -type f -name ".*" -exec chmod 775 {} \;
Это найдет скрытые файлы и изменяет разрешения
Редактировать, чтобы включить комментарий от @gerrit:
find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;
Это приведет к ограничению поиска в текущем каталоге вместо поиска рекурсивно.
GLOBIGNORE=".:.."
, чтобы скрыть. и .. каталоги. Это также устанавливает параметр dotglob: * соответствует как скрытым, так и не скрытым файлам.
Вы также можете сделать
shopt -s dotglob
Gilles :)
Здесь вы можете использовать команду find. Например,
find -type f -name ".*" -exec chmod 775 {} \;
Это найдет скрытые файлы и изменяет разрешения
Редактировать, чтобы включить комментарий от @gerrit:
find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;
Это приведет к ограничению поиска в текущем каталоге вместо поиска рекурсивно.
GLOBIGNORE=".:.."
, чтобы скрыть. и .. каталоги. Это также устанавливает параметр dotglob
: *
соответствует как скрытым, так и не скрытым файлам.
Вы также можете сделать
shopt -s dotglob
Здесь вы можете использовать команду find
. Например,
find -type f -name ".*" -exec chmod 775 {} \;
Это найдет скрытые файлы и изменяет разрешения
Редактировать, чтобы включить комментарий от @gerrit:
find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;
Это приведет к ограничению поиска в текущей директории вместо поиска рекурсивно.