Як я можу chmod / chown певний список файлів?


31

Я хочу написати .sh-скрипт для налаштування деяких дозволів папок, але було цікаво, чи можу я запустити щось на кшталт:

chown -644 ./one;/two;/three

щоб подавити список папок, а не викликати chown кілька разів.

Також, чи може бути спосіб подавити список файлів та виключити деякі інші, наприклад, наприклад:

chown -R -664 ./*;!./cache

Я сподіваюся, що мої псевдо командні рядки мають сенс.

Відповіді:


43

Практично всі інструменти Unix приймають список файлів як необов’язкові аргументи. Як завжди, різні аргументи повинні бути розділені пробілом:

chown 644 one two three

У вашому другому прикладі, якщо ви використовуєте Bash, простий

chown -R 644 !(cache)

буде достатньо

Цей підхід вимагає розширеного узгодження шаблону. Якщо він відключений, ви можете ввімкнути його

shopt -s extglob

Див.: Довідковий посібник по Bash # Узор відповідності


4

Створіть список імен файлів у mod-these.txt та запустіть:

chmod g+w `cat mod-these.txt`

або використовувати метод, описаний іншими тут:

chown 644 one two three

або перейдіть до міста з першим варіантом, але маніпулюйте кожним рядком у файлі (у цьому прикладі: замініть "/" (З пробілом раніше) на "./"):

chmod g+w `sed 's/ \// .\//' update-writable.txt` 

2

регекс для виграшу!

використання пошуку - це найкращий спосіб, який я можу придумати за межами використання регулярного виразу, яке вже може існувати у вашій конкретній оболонці або в додатку, яке ви використовуєте. по-перше, я спробував:

touch one&touch two &touch three&find -name "one|two|three" -exec chown -644 {} \;

Але ви побачите, що труба в цьому випадку не працює. Ще одна сумна річ, яку слід навчитися ... як навчання chmod, chown, chgrp та ін. ін. не підтримує відбір / виключення з кількох файлів / регулярних виразів ...
Я знайшов рішення:
/programming/19111067/regex-match-either-string-in-linux-find-command

find \( -name one -o -name two -o -name three \) -exec chown -644 {} \;

Таким чином, не стільки регулярно виражають для виграшу, але, принаймні, у нас є спосіб ввести список файлів до аргументів програми в одному вкладиші.

ви зауважите, що вам потрібно уникнути мета-символів () та додати параметр -o для кожного додаткового імені ...

інші посилання та вміст від мене, які можуть зацікавити вас під час ваших подорожей:
різні примхи - записки від корн-бурна та друзів. - Веб-сайт Дейва Хорнера

Ура.
--дав


KISS виграй, Нехай це буде просто і дурно! немає потреби в складних речах, які все ще можуть бути чистими та простими.
Аль-Мотафар

2

Якщо файли, які ви хочете змінити, знаходяться в одному каталозі, ви можете позначити їх потрібним шаблоном.

наприклад, мені потрібні всі завантажені .run файли в pwd, щоб вони були змінені на виконуваний файл:

chmod +x `ls *.run`
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.