por para linea editar desde consola comandos comando archivo abrir linux bash shell ssh

linux - para - putty comandos de linea



compruebe si el archivo existe en el host remoto con ssh (10)

Además de las respuestas anteriores, hay una forma abreviada de hacerlo:

ssh -q $HOST [[ -f $FILE_PATH ]] && echo "File exists" || echo "File does not exist";

-q es modo silencioso, suprimirá advertencias y mensajes.

Como mencionó @Mat, una ventaja de las pruebas de este tipo es que puede cambiar fácilmente la -f por cualquier operador de prueba que le guste: -nt , -d , -s , etc.

Operadores de prueba: http://tldp.org/LDP/abs/html/fto.html

Me gustaría comprobar si existe un determinado archivo en el host remoto. Intenté esto:

$ if [ ssh user@localhost -p 19999 -e /home/user/Dropbox/path/Research_and_Development/Puffer_and_Traps/Repeaters_Network/UBC_LOGS/log1349544129.tar.bz2 ] then echo "okidoke"; else "not okay!" fi -sh: syntax error: unexpected "else" (expecting "then")


Aquí hay un enfoque simple:

if ssh $HOST stat $FILE_PATH /> /dev/null 2/>/&1 then echo "File exists" else echo "File does not exist" fi


En la máquina de CentOS, el bash oneliner que funcionó para mí fue:

if ssh <servername> "stat <filename> > /dev/null 2>&1"; then echo "file exists"; else echo "file doesnt exits"; fi

Necesitaba una redirección de E / S (como la respuesta principal) así como comillas alrededor del comando para ejecutarse en el control remoto.


No puede ser mucho más simple que esto :)

ssh host "test -e /path/to/file" if [ $? -eq 0 ]; then # your file exists fi


Probar si existe un archivo:

HOST="example.com" FILE="/path/to/file" if ssh $HOST "test -e $FILE"; then echo "File exists." else echo "File does not exist." fi

Y a la inversa, prueba si no existe un archivo:

HOST="example.com" FILE="/path/to/file" if ! ssh $HOST "test -e $FILE"; then echo "File does not exist." else echo "File exists." fi


Puede especificar el shell que utilizará el host remoto localmente.

echo ''echo "Bash version: ${BASH_VERSION}"'' | ssh -q localhost bash

Y tenga cuidado de (solo) citar las variables que desea que el host remoto amplíe; De lo contrario, la expansión variable será realizada por su shell local!

# example for local / remote variable expansion { echo "[[ $- == *i* ]] && echo ''Interactive'' || echo ''Not interactive''" | ssh -q localhost bash echo ''[[ $- == *i* ]] && echo "Interactive" || echo "Not interactive"'' | ssh -q localhost bash }

Por lo tanto, para verificar si existe un determinado archivo en el host remoto, puede hacer lo siguiente:

host=''localhost'' # localhost as test case file=''~/.bash_history'' if `echo ''test -f ''"${file}"'' && exit 0 || exit 1'' | ssh -q "${host}" sh`; then #if `echo ''[[ -f ''"${file}"'' ]] && exit 0 || exit 1'' | ssh -q "${host}" bash`; then echo exists else echo does not exist fi


También quería comprobar si existe un archivo remoto pero con RSH. He probado las soluciones anteriores pero no funcionaron con RSH.

Finalmente, hice una función corta que funciona bien:

function existRemoteFile () { REMOTE=$1 FILE=$2 RESULT=$(rsh -l user $REMOTE "test -e $FILE && echo /"0/" || echo /"1/"") if [ $RESULT -eq 0 ] then return 0 else return 1 fi }


Te estas perdiendo s. La sintaxis general si lo pones todo en una línea sería:

if thing ; then ... ; else ... ; fi

La thing puede ser prácticamente cualquier cosa que devuelva un código de salida. La rama then se toma si esa thing devuelve 0, de lo else rama else .

[ no es sintaxis, es el programa de test (revisa ls /bin/[ , en realidad existe, man test para los documentos, aunque también puede tener una versión incorporada con funciones diferentes / adicionales) que se usa para probar Varias condiciones comunes en archivos y variables. (Tenga en cuenta que [[ por otra parte es una sintaxis y es manejada por su shell, si la admite).

Para su caso, no desea utilizar la test directamente, desea probar algo en el host remoto. Así que intente algo como:

if ssh user@host test -e "$file" ; then ... ; else ... ; fi


una línea, cita correcta

ssh remote_host test -f "/path/to/file" && echo found || echo not found


ssh -q $HOST [[ -f $FILE_PATH ]] && echo "File exists"

Lo anterior ejecutará el comando echo en la máquina desde la que está ejecutando el comando ssh. Para obtener el servidor remoto para ejecutar el comando:

ssh -q $HOST "[[ ! -f $FILE_PATH ]] && touch $FILE_PATH"