Script para executar o chown em todas as pastas e configurar o proprietário como o nome da pasta menos o trailing /

4

Alguns numpty executaram chown -R username . na pasta / home em nosso servidor, pensando que ele estava na pasta desejada. Escusado será dizer que o servidor está jogando um monte de wobbelys.

Temos mais de 200 sites e não quero criá-los individualmente, então estou tentando criar um script que altere o proprietário de todas as pastas para o nome da pasta, sem o /.

Isto é tudo que tenho até agora, uma vez que eu possa remover o / ele ficará bem, mas eu também gostaria de verificar se o arquivo contém um arquivo. nela, e se não executar o comando, caso contrário, vá para o próximo.

#!/bin/bash
for f in *

do

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

done

Qualquer ajuda seria ótima!

Obrigado antecipadamente!

    
por Shikoki 20.10.2012 / 11:01

2 respostas

6

Assumindo que todas as pastas no diretório / home / representam nomes de usuários, você pode usar:

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

Sugiro executar um loop de teste antes, verificando se o nome do usuário realmente corresponde a um diretório base.

Este comando AWK recupera o diretório inicial de um determinado usuário.

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

A verificação desse resultado em relação ao diretório inicial existente é um exercício para o leitor.

    
por 20.10.2012 / 11:17
1

Você pode usar o comando basename para fornecer o último componente de um caminho

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

embora inicialmente fosse executado como

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

para se certificar de que é são.

    
por 20.10.2012 / 11:40