Script per eseguire chown su tutte le cartelle e impostare il proprietario come nome della cartella less il trailing /

Un po 'di numero ha eseguito chown -R username . nella cartella / home sul nostro webserver pensando che fosse nella cartella desiderata. Inutile dire che il server sta lanciando un sacco di wobbelys.

Abbiamo oltre 200 siti web e non voglio chown tutti in modo individuale, quindi sto cercando di fare uno script che cambierà il proprietario di tutte le cartelle al nome della cartella, senza il trailing /.

  • Verificare il command disown
  • Traffico IP di path basato sul process su diversi routes / interface predefiniti
  • Come faccio a dire quanto vicino sto ottenendo a somaxconn?
  • Come trovare file che non hanno contenuto specifico?
  • Ottenere una statistica per CPU thread
  • Backup Xen domU macchine durante l'esecuzione
  • Questo è tutto quello che ho finora, una volta che posso rimuovere / farà bene, ma vorrei anche verificare se il file contiene un file. in esso, e se non esegue il command, altrimenti andare al successivo.

     #!/bin/bash for f in * do test=$f; #manipluate the test variable chown -R $test $f done 

    Qualsiasi aiuto sarebbe grande!

    Grazie in anticipo!

    2 Solutions collect form web for “Script per eseguire chown su tutte le cartelle e impostare il proprietario come nome della cartella less il trailing /”

    Supponendo che tutte le cartelle nella directory / home / directory rappresentino nomi utente, è ansible utilizzare:

     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 

    Suggerisco di eseguire un ciclo di prova prima, verificando se il nome utente corrisponda effettivamente a una home directory.

    Questo command AWK recupera la directory home per un determinato utente.

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

    Controllare questo risultato contro il dir attuale di casa è un esercizio per il lettore.

    È ansible utilizzare il command basename per fornire l'ultima componente di un path

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

    sebbene inizialmente lo faccio come

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

    per assicurarsi che fosse sana.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.