디렉토리의 내용을 검토하고 각 항목이 파일인지 폴더인지 확인하려고합니다. 네,paramiko의 파일 또는 디렉토리를 구분하십시오.
>>> for i in ftp.listdir():
... lstatout=str(ftp.lstat(i)).split()[0]
... if 'd' not in lstatout: print i, 'is a file'
...
이 작동 : 나는 this link에서 제안 된 솔루션을 할 수 있습니다. sidenote로서, 나는 단지 .split()
대신에 첫 번째 문자를 취하고있다. 따라서 str(ftp.lstati(i))[0] != 'd'
은 필자의 비 과학적 테스트에서 더 빠르다.
그러나 이것은 매우 해킹 된 것처럼 보입니다. 그래서 나는 다른 방법을 조사하려고했습니다. SFTP를 몇 폴더 속성에서 나는 참조 :
<SFTPAttributes: [ size=4096 uid=1002 gid=1002 mode=040755 atime=1358785383 mtime=1359475285 ]>
파일에 대해 동일한에서, 내가 볼 때 :
<SFTPAttributes: [ size=72 uid=1002 gid=1002 mode=0100644 atime=1367598914 mtime=1367598914 ]>
그래서 모드에 대한 파일 010[permissions]
및 040[permissions]
것 같다 디렉토리 (필자가 본 몇몇 디렉토리에서 일관성이 있지만 보편적이라고 말할 수는 없다). 이것은 항목의 속성을 얻는 훨씬 더 좋은 방법 인 것 같습니다! 그러나 ftp.stat(i).st_mode
을 사용하면 위의 디렉토리에 대해 16877
과 위의 파일에 대해 33188
이라는 다른 값을 얻게됩니다.
이들은 무엇을 의미합니까? 그 정수를 파일 모드로 변환 할 수있는 방법이 있습니까? (나는 구글을 시도했지만 관련있는 것을 찾을 수 없다.) 또는, str(lstat(i))
함수가 'd'또는 not-'d '를 리턴하는 것에 의존하지 않고 이것을 결정할 수있는 좋은 방법이 있는가?
모드는 8 진수입니다. 모드를 보려면'oct (integerValue)'를 할 수 있습니다. – sberry