Как указать 2 переменные в цикле for в оболочке bash?

Каталог /homeимеет права на выполнение, установленные для всех, чтобы пользователи могли перемещаться в свои дома внутри, но дом каждого пользователя имеет разрешения только для пользователя (, если по какой-либо причине не настроено иное ).

Единственный способ получить точно то, что вы хотите, — это создать группу, содержащую user2, и предоставить ей разрешения на выполнение для дома из user1и каталогов выше того, к которому вы хотите предоставить общий доступ. сделайте их доступными с помощью user2, а затем установите полные права доступа к полному каталогу. Я бы не рекомендовал делать это, так как user2сможет просматривать определенные файлы и подкаталоги внутри дома user1, что является плохой идеей. Вы не хотите давать другому пользователю разрешения на чужой дом.

Лучшим способом добиться этого было бы либо создать каталог в /и создать группу, содержащую пользователей, и дать им разрешения на нее, либо создать экспорт nfs с разрешениями только для двух пользователей и смонтировать его на машина. Еще раз, не давайте другому пользователю доступ к чужому дому.

-1
08.03.2021, 22:24
1 ответ

Предположим, вам нужны каталоги с целочисленными именами и что вы хотите иметь один каталог для каждого файла, соответствующий шаблону ./WhatsApp*:

shopt -s nullglob

counter=0
for name in./WhatsApp*; do
    counter=$(( counter + 1 ))
    mkdir "$counter" && cp "$name" "$counter"
done

Это пытается создать каталог для каждого совпадающего имени, и если это удается, он копирует файл в этот новый каталог. Вызов mkdirзавершится ошибкой, если этот каталог уже существует или если у вас нет прав на запись и выполнение в текущем каталоге.

Я установил параметр оболочки nullglobперед циклом, чтобы избежать запуска одной итерации цикла, если нет имен, соответствующих заданному шаблону. Без установки nullglobцикл будет выполняться один раз с $name, установленным в литеральную строку ./WhatsApp*.

0
18.03.2021, 22:26

Теги

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