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"