find, printf e comportamento estranho com o ssh

0

Então, isso funciona:

find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n" > /dir/output.txt

Mas isso não acontece:

ssh -o StrictHostKeyChecking=no "servername" find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n" > /dir/output.txt

Quando executado pelo comando ssh, recebo os seguintes erros:

bash: %TY-%Tm-%Td: command not found
bash: %TH:%TM: command not found
bash: %s: command not found
bash: %u: command not found
bash: %Un: command not found

Existe algo específico com a reformatação desse comando que está faltando?

    
por Dan 09.01.2018 / 19:49

2 respostas

4

Is there something specific with reformatting this command that I'm missing?

Sim. Você perde um nível de cotação quando executa um comando via ssh. Então isso:

find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n"

Torna-se:

find /dir/ -type f -printf %p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n

O que é um monte de comandos shell ligados por pipes ( | ). Você pode consertar isso colocando a coisa toda entre aspas simples:

ssh -o StrictHostKeyChecking=no "servername" 'find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n"' > /dir/output.txt

Ou passando seu script como stdin para bash:

ssh -o StrictHostKeyChecking=no "servername" bash <<EOF > /dir/output.txt
find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n"
EOF
    
por 09.01.2018 / 20:05
0

Responder em um cartão postal é ... prefixo e sufixo o comando original com uma única citação, como este:

ssh -o StrictHostKeyChecking=no "servername" 'find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n" > /dir/output.txt'
    
por 09.01.2018 / 20:04

Tags