Как насчет следующего:
#!/bin/bash
HOME_DIRS="/home/abcd/dammi /home/wxyz/harrami /home/abcd/harrami /home/wxyz/harrami"
DATE_DIR=$(date +%Y-%m)
DAY_DIR=$(date +%d)
for FOLDER in $HOME_DIRS; do
mkdir -p "${FOLDER}/${DATE_DIR}/${DAY_DIR}"
done
Ну, конечно, вы также можете сделать это без переменных DATE_DIR
и DAY_DIR
но этот алгоритм гарантирует, что дата не генерируется много раз, что быстрее, и гарантирует, что дата будет одинаковой для всех пользователей (даже если вы запустите ее до полуночи и последний каталог создается после полуночи).
Возможно, вам также придется подумать об улучшении сценария с помощью chown, чтобы пользователи могли писать во вновь созданные каталоги.
Редактировать: Если вы хотите создать одинаковую структуру папок в двух подпапках /home
вы можете объединить скрипт RolKau с моим:
#!/bin/bash
USER_LIST="dammi harrami"
HOME_SUBDIRS="abcd wxyz"
DATE_DIR=$(date +%Y-%m)
DAY_DIR=$(date +%d)
for HOME_SUBDIR in $HOME_SUBDIRS; do
for U in $USER_LIST; do
mkdir -p "/home/${HOME_SUBDIR}/${U}/${DATE_DIR}/${DAY_DIR}"
done
done
Edit2: я предполагаю, что список пользователей содержит имена пользователей. Итак, давайте расширим скрипт, чтобы правильно изменить владельца каталога:
#!/bin/bash
USER_LIST="dammi harrami"
HOME_SUBDIRS="abcd wxyz"
DATE_DIR=$(date +%Y-%m)
DAY_DIR=$(date +%d)
for HOME_SUBDIR in $HOME_SUBDIRS; do
for U in $USER_LIST; do
mkdir -p "/home/${HOME_SUBDIR}/${U}/${DATE_DIR}/${DAY_DIR}"
chown -R "${U}" "/home/${HOME_SUBDIR}/${U}/${DATE_DIR}"
done
done
Edit3: чтобы сменить владельца, я думаю, что самый простой способ - это прочитать владельца из каталога в /home/<subdir>/<user>
#!/bin/bash
USER_LIST="dammi harrami"
HOME_SUBDIRS="abcd wxyz"
DATE_DIR=$(date +%Y-%m)
DAY_DIR=$(date +%d)
for HOME_SUBDIR in $HOME_SUBDIRS; do
for U in $USER_LIST; do
mkdir -p "/home/${HOME_SUBDIR}/${U}/${DATE_DIR}/${DAY_DIR}"
GROUP_MEMBER=$(stat -c %G "/home/${HOME_SUBDIR}/${U}")
chown -R "${U}":"${GROUP_MEMBER}" "/home/${HOME_SUBDIR}/${U}/${DATE_DIR}"
done
done
Конечно, вы можете использовать stat, чтобы прочитать владельца; но это немного медленнее, чем просто чтение из переменной - как вы и просили:
#!/bin/bash
USER_LIST="dammi harrami"
HOME_SUBDIRS="abcd wxyz"
DATE_DIR=$(date +%Y-%m)
DAY_DIR=$(date +%d)
for HOME_SUBDIR in $HOME_SUBDIRS; do
for U in $USER_LIST; do
mkdir -p "/home/${HOME_SUBDIR}/${U}/${DATE_DIR}/${DAY_DIR}"
OWNER=$(stat -c %U "/home/${HOME_SUBDIR}/${U}")
GROUP_MEMBER=$(stat -c %G "/home/${HOME_SUBDIR}/${U}")
chown -R "${OWNER}":"${GROUP_MEMBER}" "/home/${HOME_SUBDIR}/${U}/${DATE_DIR}"
done
done
Edit4: альтернативное решение, использующее жестко закодированное членство в группе.
#!/bin/bash
USER_LIST="dammi:group1 harrami:group2"
HOME_SUBDIRS="abcd wxyz"
DATE_DIR=$(date +%Y-%m)
DAY_DIR=$(date +%d)
for HOME_SUBDIR in $HOME_SUBDIRS; do
for UG in $USER_LIST; do
G=${UG##*:}
U=${UG%%:*}
mkdir -p "/home/${HOME_SUBDIR}/${U}/${DATE_DIR}/${DAY_DIR}"
GROUP_MEMBER=$(stat -c %G "/home/${HOME_SUBDIR}/${U}")
chown -R "${U}":"${G}" "/home/${HOME_SUBDIR}/${U}/${DATE_DIR}"
done
done
Edit5: глядя на ваш первоначальный пост, желаемая структура может немного отличаться. Я предполагаю, что вы хотите иметь подкаталог в /home
для каждой группы и добавлять только пользовательские каталоги для каждого члена группы. Итак, поехали:
#!/bin/bash
USER_LIST="dammi:abcd dammi:wxyz harrami:wxyz"
DATE_DIR=$(date +%Y-%m)
DAY_DIR=$(date +%d)
for UG in $USER_LIST; do
G=${UG##*:}
U=${UG%%:*}
mkdir -p "/home/${G}/${U}/${DATE_DIR}/${DAY_DIR}"
chown -R "${U}":"${G}" "/home/${G}/${U}/${DATE_DIR}"
done
Если пользователь является членом нескольких групп, просто укажите его несколько раз в USER_LIST.