精华内容
下载资源
问答
  • sftp 文件是否存在
    2021-08-05 06:52:16

    我可以连接到服务器并查看给定目录中的所有文件,但是,当我试图打开一个文件时,我似乎总是遇到问题。在

    场景是:我想从SFTP服务器获取基于日期的最新文件,然后检查该文件中是否有特定的字符串。如果是,则返回true,否则返回false。以下是我的解决方案:def does_file_exists_on_sftp_server_and_contains_given_value(value):

    latest_date = 0

    latest_file = None

    retry_attempt = 0

    value_is_present= False

    while retry_attempt < 50:

    # the line below does the sftp server login and that works successfully

    conn = vm_sftp_login()

    files = conn.listdir_attr("directory")

    for file in files:

    if file.filename.endswith(".xml") and file.st_mtime > latest_date:

    latest_date = file.st_mtime

    latest_file = file.filename

    retry_attempt = 50

    retry_attempt += 1

    latest_file_obj = conn.get(latest_file)

    file_obj = open(latest_file_obj)

    for line in file_obj:

    if value in line:

    value_is_present = True

    break

    return value_is_present

    代码似乎在此时中断:latest_file_obj = conn.get(latest_file)。在

    回溯

    ^{pr2}$

    更多相关内容
  • 主要为大家详细介绍了java使用JSCH实现SFTP文件管理,实现上传、下载等功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 一、python判断文件和文件夹是否存在、创建文件夹 复制代码 代码如下: >>> import os >>> os.path.exists(‘d:/assist’) True >>> os.path.exists(‘d:/assist/getTeacherList.py’) True >>> os.path.isfile(...
  • sftp 查找文件是否存在

    千次阅读 2021-04-27 10:17:37
    jsch:通过文件名,判断sftp 指定路径中文件是否存在

    jsch:通过文件名,判断sftp 指定路径中文件是否存在

    通过ChannelSftp 提供的扩展,实现匹配功能

    展开全文
  • 目前开发某个功能需求时,需要校验sftp文件是否存在,而不需读取其内容。 公司现有sftp功能代码都为获取文件数据并落库或其他处理。 而我这个功能只需要校验是否存在,不想使用现有方式拉取判断是否存在,拉取文件...

    一、问题背景

    目前开发某个功能需求时,需要校验sftp中文件是否存在,而不需读取其内容。
    公司现有sftp功能代码都为获取文件数据并落库或其他处理。
    而我这个功能只需要校验是否存在,不想使用现有方式拉取判断是否存在,拉取文件必然会有成本。

    二、解决思路

    stackover回答:使用 JSch,有没有办法判断远程文件是否存在,而无需执行ls并循环遍历文件以查找名称匹配?

    • ls:查看目录下文件信息
    • stat:stat方法确实遵循符号链接(即返回链接的属性而不是目标)
    • lstat:lstat方法不遵循符号链接(即返回目标的属性而不是链接)
      例如,您有一个符号链接’myhome’,它实际上是/ u02/home/alamba的快捷方式。
      使用lstat,您将获得链接目标的属性’/ u02/home/alamba’文件夹。使用统计信息,您将获得“myhome”链接的属性。

    还是不太清楚stat和lstat的区别。网上只找到了以上信息。
    不过大致思路就是通过获取文件信息判断是否存在,获取失败都是抛出异常,自行处理即可。

    三、最终解决

    1. 连接sftp获取对象。调用其lstat方法传入文件全路径。
    2. 抛出异常说明获取不到,正常返回文件信息。
    3. 其他方式,只需将sftp.lstat换为.stat或.ls即可。
        public boolean isExistSftp(String filePach){
            boolean result = false;
            Session session = null;
            Channel channel = null;
            ChannelSftp sftp = null;
            try {
                JSch jsch = new JSch();
                session = jsch.getSession(apolo.getSftpUserName(),apolo.getSftpIp(), apolo.getSftpPort());
                session.setPassword(apolo.getSftpPassWord());
                session.setTimeout(60000);
                Properties config = new Properties();
                config.put("StrictHostKeyChecking", "no");
                session.setConfig(config);
                session.connect();
    
                channel = session.openChannel("sftp");
                channel.connect();
                sftp = (ChannelSftp) channel;
                SftpATTRS lstat = sftp.lstat(filePach);
                result = true;
            } catch (JSchException e) {
                log.error("连接SFTP失败,IP:{},端口:{},用户名:{},密码:{}",
                        apolo.getSftpIp(),apolo.getSftpPort(),apolo.getSftpUserName(),apolo.getSftpPassWord().substring(0,3),e);
            } catch (SftpException e) {
                log.error("sftp文件下载失败,找不到对应文件",e);
            } catch (Exception e){
                log.error("Sftp连接获取文件信息出现未知异常",e);
            }finally {
                if (sftp != null)sftp.quit();
                if (channel != null)channel.disconnect();
                if (session != null)session.disconnect();
            }
            return result;
        }
    

    四、遗留问题

    该方法为接口调用,请求量较大时,与sftp频繁建立连接势必会造成性能、通讯损耗。

    甲方封装代码

    在这里插入图片描述
    个人浅显理解:

    1. bean为单例,整个jvm只有一个对象共用。
    2. 按照目前的写法,系统启动或使用时初始化建立与ftp的链接。每次使用时只调用其下载或上传等方法,不能调用关闭。
    3. 但目前了解到功能开发为方法内注入该bean,先调用connect创建链接,之后下载,最后close关闭。
    4. 多线程环境下,很大可能会造成A线程关闭了B新建的链接会话。相当于俩线程同时操作bean内的成员变量。

    五、附ftp连接

    该部分引入:https://www.ktanx.com/blog/p/4028

    减少依赖,使用JDK自带的ftp客户端sun.net.ftp.FtpClient

    FtpClient ftpClient = new FtpClient();
    ftpClient.openServer(FTP_IP, FTP_PORT);
    ftpClient.login(LOGIN_NAME, PASSWORD);
    ftpClient.binary();
    TelnetInputStream is = ftpClient.get("/ftp/re/20140713.dat");
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    

    apache的commons-net

    FtpClient ftpClient = new FtpClient();
    ftpClient.connect(FTP_IP, FTP_PORT);
    ftpClient.login(LOGIN_NAME, PASSWORD);
    // 中文支持
    ftpClient.setControlEncoding("UTF-8");   
    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
    ftpClient.enterLocalPassiveMode();  
      InputStream is = ftpClient.retrieveFileStream("/ftp/re/20140713.dat");
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    

    sftp

    ChannelSftp sftp = null;
    JSch jsch = new JSch();
    Session sshSession = jsch.getSession(LOGIN_NAME, FTP_IP, FTP_PORT);
    sshSession.setPassword(PASSWORD);
    sshSession.setConfig("StrictHostKeyChecking", "no");
    sshSession.connect();
    Channel channel = sshSession.openChannel("sftp");
    channel.connect();
    sftp = (ChannelSftp) channel;
    InputStream is = sftp.get("/ftp/re/20140713.dat");
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    
    展开全文
  • ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: ssh.connect(hostname=host, port=port, username=username, password=password) sftp = ssh.open_sftp() # sftp.chdir("/tmp/") try: print(sftp....
    #!/usr/bin/env python
    
    import paramiko
    
    host = 'host'
    port = 22
    username = password = 'a2a'
    
    # make a local test file
    # open('deleteme.txt', 'w').write('you really should delete this]n')
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        ssh.connect(hostname=host, port=port, username=username, password=password)
        sftp = ssh.open_sftp()
        # sftp.chdir("/tmp/")
        try:
            print(sftp.stat('/opt/FineReport_Files/webroot/WEB-INF/reportlets/EO/ExcessReport_epd6_20210404.xlsx'))
            print(sftp.stat('/opt/FineReport_Files/webroot/WEB-INF/reportlets/EO/ExcessReport_epd1_20210404.xlsx'))
            print('file exists')
        except IOError:
            print('file not exists')
    
        ssh.close()
    except paramiko.SSHException:
        print("Connection Error")
    

    在这里插入图片描述

    展开全文
  • public boolean isExistDir(String path,ChannelSftp sftp){ boolean isExist=false; try { SftpATTRS sftpATTRS = sftp.lstat(path); isExist = true; return sftpATTRS.isDir(); } catch (Exception e) {
  • 问题:我有一个需要连接的SFTP服务器(出于隐私目的,我将提供虚拟凭据)。服务器名称:服务器名称端口:22用户名:用户名密码:密码当我连接到服务器时,它会自动将我放置在/FGV目录中。 该目录中还有另外两个文件夹...
  • 此示例程序在复制之前检查是否存在.#!/usr/bin/env pythonimport paramikoimport getpass# make a local test fileopen('deleteme.txt', 'w').write('you really should delete this]n')ssh = paramiko.SSHClien...
  • java判断远程服务器上的文件是否存在的方法,需要的朋友可以参考一下
  • linux判断远程服务器文件是否存在 内容精选换一换仅在部分局点Region公测使用。该功能仅支持v1.15及以上版本集群。CCE Turbo集群自定义镜像方法请参见制作CCE节点自定义镜像。镜像需打上专有标签,标签键值均为cce。...
  • Java判断文件是否存在

    2020-12-22 17:45:58
    1、判断文件是否存在,不存在创建文件 Filefile=newFile("C:\Users\QPING\Desktop\JavaScript\2.htm"); if(!file.exists()) { try{ file.createNewFile(); }catch(IOExceptione){ //TODOAuto...
  • 例如:校验服务器是否生成此文件 用 ls() 得到指定目录下的文件列表 解决方案: Vector uploadPath1 = sftp.ls(路径); Booleancontains = uploadPath1.toString().contains("xx.test"); if (contains) { System...
  • 通过sftp协议检查远程主机是否存在指定的文件存在返回零,有不存在文件返回非零。本人操作系统是linux。
  • sftpsftp怎么判断文件夹是否存在

    千次阅读 2021-03-13 04:14:20
    } } /** * linux上传文件 */ public void upload(String directory, File file) { ChannelSftp sftp = connectSftp(); try { if (null != sftp) { sftp.cd(directory); logger.info("cd {}", directory); ...
  • SFTP支持通常的FTP命令(chdir,mkdir等),所以使用这些命令:sftp = paramiko.SFTPClient.from_transport(transport)try:sftp.chdir(remote_path) # Test if remote_path existsexcept IOError:sftp.mkdir(remote_path...
  • /bin/bash#日期初始化 T-1天#dt=$(date -d '-1 day' '+%Y%m%d')#拼接数据文件ftp服务器上的地址dt=$1sys=$2file_name=$3file_name_tail=".txt.gz"ftp_url="/src/$dt/$sys/"#shell脚本存放路径...
  • 主要给大家介绍了关于PHP连接sftp并下载文件的相关资料,需要的朋友可以参考下
  • 检查文件或目录是否存在 ,我们使用了php中常用的函数file_exists,这个函数就可以实现我想要的功能,下面大家慢慢参考一下
  • 本文主要介绍了linux shell 中判断文件、目录是否存在的方法,分享给大家 -e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真 -L ...
  • 主要介绍了java使用SFTP上传文件到资源服务器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • SFTP创建目录和判断目录是否存在

    千次阅读 2021-10-25 21:51:03
    /** * 创建目录 * @param createpath * @return ... public static boolean createDir(String createpath, ChannelSftp sftp) { try { if (isDirExist(createpath,sftp)) { sftp.cd(createpath);
  • Windows平台下c++ 对ftp和sftp文件以及文件夹下载上传整体的工程源代码。 内涵文档,测试用例 经过单元测试,集成测试 可靠,本人也是经过半个月的开发和封装
  • java sftp上传文件夹时判断子目录是否存在,百度查全是获取父文件夹下的所有文件名,去匹配存在。这样速度慢, 用sftp.stat(path)方法,API这也介绍这个方法Retrieves the file attributes of a file or ...
  • 用C语言检查远程主机是否存在指定的一个或多个文件,都存在返回零,有一个或多个文件存在返回值小于零。端口号自己自己定义(一般都是22)。需要远程主机安装有sftp服务端。这是本人根据自己需要编写的,linux操作...
  • php读取ftp服务器文件是否存在 内容精选换一换使用vi编辑器打开“/etc/default/grub”,按如下要求修改参数:GRUB_CMDLINE_LINUX参数为console=tty0 console=ttyAMA0,115200GRUB_TERMINAL参数为serialGRUB_SERIAL_...
  • package sftp;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Vector;import com.jcraft.jsch.Channel;import com.jcraft.jsch.ChannelSftp;import ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,936
精华内容 5,574
关键字:

sftp 文件是否存在