Bagaimana dengan yang berikut ini:
#!/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
Yah, tentu saja Anda juga bisa melakukannya tanpa DATE_DIR
dan DAY_DIR
variabel tetapi algoritma ini memastikan tanggal tidak dihasilkan berkali-kali yang lebih cepat dan memastikan tanggal sama untuk semua pengguna (bahkan jika Anda memulainya tepat sebelum tengah malam dan yang terakhir). direktori dibuat setelah tengah malam).
Anda mungkin juga harus berpikir tentang meningkatkan skrip menggunakan chown untuk memungkinkan pengguna menulis ke direktori yang baru dibuat.
Sunting: Jika Anda ingin membuat struktur folder yang sama dalam dua /home
sub-folder, Anda dapat menggabungkan skrip RolKau dengan yang saya:
#!/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
Sunting2: Saya menganggap daftar pengguna berisi nama-nama pengguna. Jadi mari kita memperluas skrip sehingga pemilik direktori juga berubah dengan baik:
#!/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
Sunting3: Untuk mengubah kepemilikan saya pikir cara termudah adalah dengan membaca kepemilikan dari direktori di /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
Tentu Anda bisa menggunakan stat juga untuk membaca pemiliknya; tapi itu sedikit lebih lambat daripada hanya membacanya dari variabel - seperti yang Anda minta:
#!/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
Sunting4: Solusi alternatif menggunakan keanggotaan grup yang dikode keras.
#!/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
Sunting5: Melihat posting awal Anda struktur yang diinginkan mungkin sedikit berbeda. Saya kira Anda ingin memiliki sub-direktori /home
untuk setiap grup dan hanya menambahkan direktori pengguna untuk setiap anggota grup. Jadi begini:
#!/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
Jika pengguna adalah anggota dalam beberapa grup, cukup tentukan beberapa kali di USER_LIST.
$(date "+%Y-%M/%d")
Gunakan
-p
opsi untuk mkdir untuk membuat lebih dari satu elemen jalan pada saat itu, dan gunakan for-loop untuk menghindari pengulangan diri sendiri:(garis-istirahat untuk menunjukkan struktur logis; bisa semuanya dalam satu baris)
sumber
$(date "+%Y-%M/%d")
date
yang buruk dan tidak boleh dilakukan karena risiko perubahan tanggal. Bug teoretis masih merupakan bug.