Copie os arquivos do caminho para o caminho da mesma estrutura para cada usuário

0

Como copiar um arquivo único, por exemplo, index.html

da fonte

/backup/cpbackup/daily/a1/homedir/public_html/index.html
/backup/cpbackup/daily/b2/homedir/public_html/index.html
/backup/cpbackup/daily/c3/homedir/public_html/index.html
/backup/cpbackup/daily/d4/homedir/public_html/index.html
/backup/cpbackup/daily/e5/homedir/public_html/index.html
/backup/cpbackup/daily/f6/homedir/public_html/index.html

para o destino

/home/a1/public_html/index.html
/home/b2/public_html/index.html
/home/c3/public_html/index.html
/home/c4/public_html/index.html
/home/e5/public_html/index.html
/home/f6/public_html/index.html

O comando cp não pode fazer isso para copiar todos os arquivos para o mesmo diretório para cada usuário, então, como posso fazer isso?

    
por iLinux85 03.10.2013 / 00:02

1 resposta

1

Você pode usar um loop de shell (copiar / colar isso em uma janela de terminal):

for user in a1 b2 c3 c4 e5 f6; do
 cp -p "/backup/cpbackup/daily/$user/homedir/public_html/index.html" \
    "/home/$user/public_html/";
done

O sinal -p torna cp preservar os atributos (proprietário, grupo, registro de data e hora) dos arquivos copiados.

Se você quiser fazer isso para todos usuários (ou seja, todos os subdiretórios de /backup/cpbackup/daily/ ), você pode fazer algo assim, o que evita a inserção manual dos nomes de usuário:

for dir in /backup/cpbackup/daily/*; do user=$(basename $dir);
    cp -p "/backup/cpbackup/daily/$user/homedir/public_html/index.html" \
    "/home/$user/public_html/";
done
    
por 03.10.2013 / 00:14