2012-08-15 221 views

Respuesta

3

(esto es si usted está utilizando la parte SFTP de la biblioteca, un supuesto que hice sin pensar en ello.)

pensé su ls(String path) aceptarían nombres de archivo; No puedo verificarlo en este momento.

Si no lo hace, no necesita iterar manualmente; puede utilizar la variante de selector:

ls(String path, ChannelSftp.LsEntrySelector selector) 
1

puede comprobar por

if [ -e FILE_NAME ] ; then 
    //do something 
fi 

o

if [ -d DIRNAME ] 

para el directorio

o

if [ -l SYMLINK ] 

para softlinks

espero que esto ayude a


Aquí se muestra un ejemplo para ejecutar comandos en la máquina remota http://www.jcraft.com/jsch/examples/Exec.java.html

Puede muy bien llevado ls o un pase de un guión conjunto. Es lo mismo que copiar el script en una máquina remota y luego ejecutarlo.

+0

Pensé que podrías enviar el comando sobre Jsch. – Nishant

+0

Tienes razón, suponía que el OP estaba usando las partes sftp de la biblioteca, ¡lo siento! –

13

Así es como compruebo la existencia de directorio en JSch.

Nota: no está relacionado con esta pregunta, pero a algunos les puede resultar útil.

Crear directorio si no existe dir

ChannelSftp channelSftp = (ChannelSftp)channel; 
String currentDirectory=channelSftp.pwd(); 
String dir="abc"; 
SftpATTRS attrs=null; 
try { 
    attrs = channelSftp.stat(currentDirectory+"/"+dir); 
} catch (Exception e) { 
    System.out.println(currentDirectory+"/"+dir+" not found"); 
} 

if (attrs != null) { 
    System.out.println("Directory exists IsDir="+attrs.isDir()); 
} else { 
    System.out.println("Creating dir "+dir); 
    channelSftp.mkdir(dir); 
} 
+0

Esta es la solución correcta, porque encuentra archivos con '*' en el nombre → sin globbing! –

+0

Está al menos relacionado y vine aquí específicamente para verificar el directorio, no los archivos. Estaba tratando de averiguar si un parámetro pasado a mi programa estaba haciendo referencia a un directorio o archivo en un sistema remoto, así que gracias. – gravy21

6

También puede hacer algo como esto:

try { 
    channelSftp.lstat(name); 
} catch (SftpException e){ 
    if(e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE){ 
    // file doesn't exist 
    } else { 
    // something else went wrong 
     throw e; 
    } 
} 

Si usted hace una lstat en algo que no existe obtiene un SftpExecption con una identificación de 2; de lo contrario, obtendrá información sobre el archivo.

0

Actualmente en mi proyecto ls trabajando sin bucles. Acabo de pasar a la ruta de llamada ls con nombre de archivo.

private static boolean exists(ChannelSftp channelSftp, String path) { 
    Vector res = null; 
    try { 
     res = channelSftp.ls(path); 
    } catch (SftpException e) { 
     if (e.id == SSH_FX_NO_SUCH_FILE) { 
      return false; 
     } 
     log.error("Unexpected exception during ls files on sftp: [{}:{}]", e.id, e.getMessage()); 
    } 
    return res != null && !res.isEmpty(); 
} 

Por ejemplo, hay un archivo file.txt con una url sftp://[email protected]/path/to/some/random/folder/file.txt. Paso a la función existspath como /path/to/some/random/folder/file.txt

Cuestiones relacionadas