Eu estou olhando para criar um script bash para consultar um servidor remoto para a última vez que cada instância de um arquivo foi modificado. Cada diretório inicial possui uma versão deste arquivo.
Por exemplo, ambos owner
e owner1
ter uma cópia do foo.txt
em seus diretórios home em uma caixa remota acessível via ssh
.
/home/owner/
-rw-r--r-- 1 owner owner 3368 Jul 29 2014 foo.txt
/home/owner1/
-rw-r--r-- 1 owner1 owner1 3368 Jul 28 2014 foo.txt
Eu gostaria de enviar essas informações para um arquivo que se parecesse com:
User: owner Last Modified: Jul 29 2014
User: owner1 Last Modified: Jul 28 2014
Respostas:
2 para resposta № 1Você deveria ao menos mostrar que tentou escrever o roteiro sozinho. De qualquer forma, é apenas um one-liner, então por que discutir?
ssh remote-box "ls -l /home/*/foo.txt"
Não é precisamente o formato que você sugeriu, mas tem toda a informação que você pediu.
0 para resposta № 2
echo owner: `ssh owner@remote-box "date -r foo.txt"`>output.txt
echo owner1: `ssh owner1@remote-box "date -r foo.txt"`>>output.txt
0 para resposta № 3
A seguinte função irá imprimir os dados que você está procurando:
remote_mod() {
ssh $1 ls -l $2 | awk "{ print "User: "$3" Last Modified: "$6" "$7" "$8 }"
}
Isso imprime algo como:
$ remote_mod yourmachine "~/.bashrc"
User: root Last Modified: Jun 2 15:01
Você pode fazer isso em um loop se quiser executar o comando em vários arquivos remotos:
for d in owner owner1
do
remote_mod yourmachine /home/$d/foo.txt
done
o stat
comando lhe dará ainda mais informações, mas está em um formato mais detalhado.
0 para a resposta № 4
Aqui vai, talvez não exatamente a saída que você quer, mas eu tenho certeza que você será capaz de modificar o script para atender às suas necessidades. Certifique-se de que o usuário com acesso de leitura tenha acesso aos diretórios iniciais.
ssh HOSTNAME "find /home/ -maxdepth 2 -name foo.txt | xargs -l -I{} bash -c "{
DIR=$(dirname {});
LAST=$(stat -c %y {});
echo "Dir:${DIR} Last Modified :${LAST}"
}""
Se o proprietário do arquivo é o "usuário" que você deseja imprimir, você pode simplificar com:
ssh HOSTNAME "find /home/ -maxdepth 2 -name foo.txt | xargs -l -I{} bash -c "{
stat -c "User: %U Last Modified : %y" {};
}""