Как должен я шарик для всех скрытых файлов?

Я хочу выполнить некоторое действие (сказать chown) на всех скрытых файлах в каталоге.

Я знаю что это .* не хорошая идея, потому что она также найдет ток . и родитель .. каталоги (я знаю это rm не будет воздействовать на . и .. но другие команды, включая chown и chmod, счастливо вступит в силу),

Но все мои скрытые файлы имеют различные имена!

Как должен я шарик для всех скрытых файлов в то время как, исключая . и .. ?

23
задан 26 September 2016 в 03:21

3 ответа

Вы можете использовать следующий шаблон extglob :

.@(!(.|))
  • . соответствует литералу . сначала

  • @ () - это шаблон extglob , будет соответствовать одному из шаблонов внутри, так как у нас внутри только один шаблон, он выберет этот

  • ! (. | ) - это еще один шаблон extglob (вложенный), который соответствует любому файлу, у которого нет или один . ; Как мы сопоставили . уже в начале, весь этот шаблон будет соответствовать всем файлам, начинающимся с . кроме . и .. .

extglob включен в интерактивных сеансах bash по умолчанию в Ubuntu. Если нет, сначала включите его:

shopt -s extglob

Пример:

$ echo .@(!(.|))
.bar .foo .spam
20
ответ дан 23 November 2019 в 01:32
 GLOBIGNORE=".:.."

, чтобы скрыть расширение. и .. каталоги. Это также устанавливает параметр dotglob : * соответствует как скрытым, так и не скрытым файлам.

Вы также можете использовать

shopt -s dotglob

Gilles :)

21
ответ дан 23 November 2019 в 01:32

Здесь вы можете использовать команду find . Например, что-то вроде

find -type f -name ".*" -exec chmod 775 {} \;

Это найдет скрытые файлы и изменит права доступа


Edit, чтобы включить комментарий @gerrit:

find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;

Это ограничит поиск до текущего каталога вместо рекурсивного поиска.

9
ответ дан 23 November 2019 в 01:32

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

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