태그 보관물: shell

shell

Linux에서 출력 라인 당 하나의 파일 이름을 어떻게 나열합니까? updater_error_log.txt 다음과

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. 자신의 스크립트도 이와 유사하게 설명해야합니다.


답변