Copie o arquivo mais novo no diretório sobre SSH

1

Como é possível copiar o arquivo de texto mais recente de um diretório específico em um servidor remoto para sua máquina local?

No próprio servidor, posso fazer o seguinte:

$ cat 'cd /home/user/dir ; readlink -f $(ls -t | head -1)' > ~/newest.txt

Isso coloca o conteúdo do arquivo mais recente em ~/newest.txt . No entanto, não posso executar isso por SSH porque o sistema local tenta interpretar as marcas de escala e os comandos $(*) . Id est, isso não funciona:

$ ssh [email protected] "cat 'cd /home/user/dir ; readlink -f $(ls -t | head -1)'" > ~/newest.txt
bash: cd: /home/user/dir: No such file or directory
Connection to server.com closed.

Obviamente, /home/user/dir não existe em minha máquina local . Eu tentei usar o SSH com o sinalizador -t também, isso não ajudou. Como posso obter os ticks e $() a serem analisados na máquina remota, não na minha máquina local?

Como um aparte, alguém mais esperto do que eu declarou uma vez que a saída de ls não será analisada . Podemos seguramente assumir, para fins desta questão, que os nomes de arquivos contêm apenas caracteres ASCII imprimíveis. No entanto, as respostas que abordam o caso geral seriam ótimas, assim como eu quero aprender , não apenas passar por isso uma vez.

    
por dotancohen 24.08.2014 / 15:13

1 resposta

7

Você precisa usar aspas simples em vez de aspas duplas para impedir a expansão do shell antes que seu comando seja passado para um servidor remoto.

BTW, $( agora são preferidos em relação a ' na substituição de comando. A menos que você use o shell que suporta apenas ' considere usar $( na substituição de comando. Veja aqui para mais detalhes .

    
por 24.08.2014 / 16:02