2015-01-19 1 views
0

에 난 내가 전용 형식 xyz_YYYYMMDD.csv.gz에서 파일 목록을 얻으려면 내 자바 프로그램을 통해JSch의 ChannelSftp.ls - 패스 일치 패턴은 자바

xyz_20140101.csv.gz 
xyz_2014_01_01.csv.gz 
xyz_20140202.csv.gz 
xyz_2014_02_02.csv.gz 

같은 SFTP 위치에 여러 개의 파일을 가지고있는 ChannelSftp.ls 명령에서 전달할 내 일치 패턴이어야합니다.

나는 ls 명령에 전달

pattern = xyz_*csv.gz , but it gives me all the files . 

ChannelSftp.ls(pattern); 

어떻게해야 내 패턴을 통과입니까?

+0

당신은 –

답변

2

ChannelSftp.ls는 인수로 경로를 취 http://epaul.github.io/jsch-documentation/javadoc/com/jcraft/jsch/ChannelSftp.html#ls(java.lang.String)

경로 (* 또는?) 글로브 패턴 와일드 카드를 포함 할 수 있지만 당신은 그 날짜가에 자리를 가지고 검사 할 수 없습니다.

그래서 그냥 방금 다음 사용할 수있는 날짜가 자리에서 서식이 확인하지 않아도 경로를 나열하고 경우에

 Vector ls = channelSftp.ls(path); 
     Pattern pattern = Pattern.compile("xyz_[0-9]{8}.csv.gz"); 
     for (Object entry : ls) { 
      ChannelSftp.LsEntry e = (ChannelSftp.LsEntry) entry; 
      //match regex on e.getFilename() 
      Matcher m = pattern.matcher(e.getFilename()); 
      if (m.matches()) { 
       //TODO you code 
      } 

     } 

후 정규식을 적용 패턴 ChannelSftp.ls

pattern = xyz_????????.csv.gz 

하지만이 또한 같은 일치합니다 : xyz_2014_aaa.csv.gz는

+0

은 내가 정규식 소요되는 API를 어떤 방법을 찾을 수없는 ls 명령 자체 –

+0

에서 어떤 방식으로 정규 표현식을 통과 할 수 없습니다 예를 들어/샘플 코드에 의해 내를 알려 주시기 바랍니다 수 있습니다; 하지만 파일을 다운로드하지 않고 있기 때문에 아무런 불편 함을 느끼지 못합니다. – user1121883

+0

내 문제에 대한 답변을 주셔서 감사합니다. 같은 방식으로 생각하고 있었지만 파일에 대한 정규 표현식을 어떻게 만들 수 있습니까? –

0

ChannelSftp.lspath 인수의 경로와 패턴을 허용합니다

매개 변수 :

path - 현재 원격 디렉토리 패턴의 상대적인 위치를 설정합니다. 패턴에는 마지막 구성 요소에 glob 패턴 와일드 카드 (* 또는 ?)가 포함될 수 있습니다 (예 : / 이후).

인수에 대한 경로를 포함해야합니다. 필요한 파일 만 일치하도록 패턴을 수정하십시오. 실제로 사용하고있는 패턴은 원하는 파일뿐만 아니라 목록의 모든 파일과 일치합니다.

xyz_????????.csv.gz을 사용하면 변수 부분에 8자를 명시 적으로 요구할 수 있습니다.

path_and_pattern = "/path/xyz_????????.csv.gz"; 

files = channel.ls(path_and_pattern);