Ls는 사람이 소비하도록 설계되었으며 출력을 구문 분석해서는 안됩니다 .
쉘 스크립트에는 ls의 출력을 구문 분석하는 것이 원하는 효과를 얻는 가장 간단한 방법 인 몇 가지 경우가 있습니다. ls는 파일 이름에서 비 ASCII 및 제어 문자를 엉망으로 만들 수 있으므로 이러한 경우는에서 파일 이름을 얻지 않아도되는 부분 집합입니다 ls
.
파이썬에서는 호출 할 이유가 전혀 없습니다 ls
. 파이썬에는 모든 ls
기능이 내장되어 있습니다. 사용하여 os.listdir
디렉토리의 내용을 나열하고, os.stat
또는 os
파일의 메타 데이터를 얻을 수 있습니다. os
모듈의 다른 기능도 문제와 관련이있을 수 있습니다.
ssh를 통해 원격 파일에 액세스하는 경우 파일 이름을 나열하는 합리적으로 강력한 방법은 sftp를 사용하는 것입니다.
echo ls -1 | sftp remote-site:dir
이것은 한 줄에 하나의 파일 이름을 인쇄하며 ls
유틸리티 와 달리 sftp
인쇄 할 수없는 문자를 엉망으로 만들지 않습니다. 파일 이름에 줄 바꿈이 포함 된 디렉토리는 여전히 안정적으로 나열 할 수 없지만 거의 수행되지 않습니다 (이는 유용성 문제가 아니라 잠재적 인 보안 문제로 기억하십시오).
파이썬에서 (쉘 메타 문자는 이스케이프해야 함 remote_dir
) :
command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")
보다 복잡한 상호 작용을 보려면 설명서에서 sftp의 배치 모드를 찾으십시오.
일부 시스템 (리눅스, 맥 OS X, 아마도 다른 유닉스,하지만 확실히 Windows)에서 다른 접근 방식과 ssh를 통해 원격 파일 시스템을 마운트하는 것입니다 SSHFS 한 다음 로컬로 작동합니다.