ls -a
디렉토리에서 파일 이름을 가져 오는 명령을 사용 하고 있지만 출력은 한 줄에 있습니다.
이처럼 :
. .. .bash_history .ssh updater_error_log.txt
다음과 같이 새 줄에 각각 파일 이름을 얻으려면 기본 제공 대안이 필요합니다.
.
..
.bash_history
.ssh
updater_error_log.txt
답변
다음과 같이 -1
옵션을 사용하십시오 (소문자 “L”이 아닌 “한”숫자 임).
ls -1a
그러나 먼저 ls
지원하십시오 -1
. GNU coreutils (표준 Linux 시스템에 설치)와 Solaris는; 하지만 의심하는 경우, 사용 man ls
하거나 ls --help
또는 설명서를 참조하십시오. 예 :
$ man ls
...
-1 list one file per line. Avoid '\n' with -q or -b
답변
예, ls
한 줄에 하나의 파일 이름 만 쉽게 출력 할 수 있습니다 .
ls -a | cat
설명 : 명령 ls
은 출력이 터미널 또는 파일 또는 파이프로 출력되는지 감지하여 적절하게 조정합니다.
따라서 ls -a
파이썬으로 파이프 하면 특별한 조치없이 작동해야합니다.
답변
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 한 다음 로컬로 작동합니다.
답변
당신이 사용할 수있는 ls -1
ls -l
또한 일을 할 것입니다
답변
파일 이름에 줄 바꿈이 포함되어 있지 않으면 쉽습니다.
find . -maxdepth 1
이것을 다른 명령으로 파이프하는 경우 파일 이름에 널 바이트가 발생할 수 없으므로 줄 바꿈이 아니라 줄 바꿈 대신 파일 이름을 널 바이트로 구분하는 것이 좋습니다.
find . -maxdepth 1 -print0
널 바이트는 일반적으로 인쇄되지 않으므로 터미널에서 인쇄하면 한 줄로 표시 될 수 있습니다. 일부 프로그램은 다음과 같은 핸들 널 (null)로 구분 된 입력에 특정 옵션 필요가 있습니다 sort
‘들 -z
. 자신의 스크립트도 이와 유사하게 설명해야합니다.