Como posso copiar um arquivo para o diretório inicial de todos os usuários no BASH?

1

Estou tentando copiar um arquivo para o diretório pessoal de cada usuário. Idealmente, o arquivo seria chown / chgrp, mas essa não é a pergunta que estou fazendo. minha verdadeira pergunta é como selecionar todos os subdiretórios com um caractere curinga.

$ touch testfile
$ sudo cp testfile /home/*/

Isso copia com sucesso o arquivo para o diretório do usuário atual, mas para todos os outros usuários, recebo

cp: omitting directory '/home/user2/'
cp: omitting directory '/home/user3/'

E assim por diante. Agradecemos antecipadamente pela (s) resposta (s).

    
por Stephen C 18.12.2016 / 07:56

2 respostas

2

cp não aceita vários alvos, portanto, você precisará fornecer o loop por conta própria. O equivalente direto do que você está tentando fazer deve ser

for homedir in /home/*; do sudo cp testfile "$homedir"; done

com as advertências habituais: supondo que você não tenha espaços nos nomes de usuários, supondo que os diretórios pessoais sejam exatamente aqueles em /home (caso contrário, você precisa obter o local do diretório inicial em /etc/passwd , mas isso inclui usuários do sistema, assim, você gostaria de ver apenas aqueles com um UID suficientemente alto e onde os UIDs do usuário iniciam dependendo da distribuição).

    
por 18.12.2016 / 08:26
0

Obrigado @UlrichSchwarz pela ideia de fazer isso dentro de um loop. Para minha própria paz de espírito, adicionei um cheque para garantir que os arquivos comuns não sejam sobrescritos.

# First command-line arg is the file to be copied
for homedir in /home/* ; do 
    if [ -d "$homedir" ] ; then
         cp $1 "$homedir"
         user=$(ls -ld $homedir | awk '{print $3}')
         chown --verbose $user:$user $homedir/$1
    fi
done

Isso também abre a porta para resolver com relativa facilidade o meu "nice-to-have", que estava mudando a propriedade do grupo e do usuário.

    
por 18.12.2016 / 15:40