Назад | Перейти на главную страницу

Скрипт для запуска chown для всех папок и установки владельца в качестве имени папки минус конечный /

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

У нас более 200 веб-сайтов, и я не хочу отбирать их все по отдельности, поэтому я пытаюсь создать сценарий, который изменит владельца всех папок на имя папки без завершающего /.

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

#!/bin/bash
for f in *

do

    test=$f;
    #manipluate the test variable
    chown -R $test $f

done

Любая помощь была бы замечательной!

Заранее спасибо!

При условии, что все папки в каталоге / home / представляют имена пользователей, вы можете использовать:

for dir in /home/*/; do
    # strip trailing slash
    homedir="${dir%/}"
    # strip all chars up to and including the last slash
    username="${homedir##*/}"

    case $username in
    *.*) continue ;; # skip name with a dot in it
    esac

    chown -R "$username" "$dir"
done

Я предлагаю предварительно запустить тестовый цикл, чтобы проверить, действительно ли имя пользователя соответствует домашнему каталогу.

Эта команда AWK извлекает домашний каталог для данного пользователя.

awk -F: -v user="$username" '{if($1 == user){print $6}}' < /etc/passwd

Сверка этого результата с существующим домашним каталогом - упражнение для читателя.

Вы можете использовать базовое имя команда для предоставления последнего компонента пути

for dir in /home/*
do
    if [ -d "$dir" ]
    then
        username=$(basename "$dir")
        chown -R "$username" "$dir"
    fi
done

хотя изначально я бы запустил его как

for dir in /home/*
do
    if [ -d "$dir" ]
    then
        username=$(basename "$dir")
        echo "chown -R $username $dir"
    fi
done

чтобы убедиться, что это разумно.