ls로 인쇄되는 파일 수를 어떻게 제한합니까?


89

ls명령 에서 나열된 파일의 수량을 제한하는 방법이 있습니까?

나는 본 적이:

ls | head -4

그러나 실행 head하거나 tail실행하려면 ls상당한 시간이 걸릴 수있는 엄청난 양의 파일이있는 디렉토리와 실행이 끝날 때까지 기다려야합니다 .

ls해당 head명령 을 사용하지 않고 제한 하는 명령 을 실행하고 싶습니다 .

답변:


109

당신이 시도 했습니까

ls -U | head -4

이것은 정렬을 건너 뛰어야 ls하므로 아마도 너무 오래 걸립니다.

https://stackoverflow.com/questions/40193/quick-ls-command


"ls -U"는 여전히 인쇄하기 전에 전체 디렉토리를 읽습니다 ... 파일을 제한하기 위해 작은 스크립트를 작성한다고 생각하지만 질문 링크는 읽기 좋은 자료입니다. 고마워 니코
AndreDurao

5
@AndreDurao, GNU ls -U는 인쇄하기 전에 반드시 전체 디렉토리를 읽을 필요는 없습니다. strace -e getdents,write ls -U > /dev/null예를 들어 큰 디렉토리에서 시도하십시오 .
Stéphane Chazelas

참고 사항 : OSX에서 strace를 실행하려면 dtrace를 찾으십시오. strace 명령은 Linux 유틸리티입니다
AndreDurao

12

사용중인 버전에 GNU lsls 와 같은 파일을 정렬하지 않는 방법이 있으면이를 사용하십시오. 옵션이 없으면 먼저 모든 파일을 읽은 다음 이름을 정렬 한 다음 인쇄를 시작합니다.-Uls

또 다른 가능성은 find이름을 찾을 때 인쇄 하는 run 입니다.

find . -name . -o -prune | head

( line 에서 head작업 하므로 파일 이름에 줄 바꿈 문자가 포함되지 않는다고 가정 함).


1
findbusybox 또는 heirloom find또는 GNU 와 달리 GNU의 경우 ls -U인쇄를 시작하기 전에 전체 디렉토리를 읽는 것으로 보입니다.
Stéphane Chazelas 16:14에

4

아마도 당신은 이외의 도구가 필요 ls합니까?

예를 들어, Randal Schwartz에는 필요에 맞는 것을 구축하는 데 도움이 되는 큰 디렉토리에서 사용하는 방법 perl 대한 블로그 항목 이 있습니다.

랜달을 게시 블로그에 둘 것을 설명 lsfind그동안 시도가 어떤을 인쇄하기 전에 모든 디렉토리 항목을 읽어 올 perl그가 제안 솔루션을하지 않습니다.


또한 ls와 find가 인쇄하기 전에 전체 디렉토리를 읽으므로 최상의 옵션이 될 수 있다고 생각했습니다. AFresh1 덕분에 진주 대신 루비 스크립트를 작성하려고했습니다!
AndreDurao

1
@AndreDurao는, perl아마도 사용 readdir(3)과 같은 lsfind. readdir(3)GNU / 리눅스의 최신 버전에 적어도 전화 않습니다 getdents()대형과 시스템 호출 수를 (만들어지고 호출이 실제로 일반적으로 시스템의 수를 줄임으로써 성능을 최적화 않습니다를). 그러나 귀하의 경우 더 적은 파일을 원한다면 readdirBSD getdirentries(3)또는 getdents(2)시스템 호출 을 우회 하여 대신 사용해야 하는 것처럼 보입니다 .
Stéphane Chazelas

3

성능이 문제가 아닌 경우 (이 파일의 복제본으로 닫힌 질문에서와 같이) 첫 번째 n 파일을 (의 출력의 첫 번째 n 줄과 반대로 ls) 파일 이름별로 정렬 된 숨김 파일 zsh을 사용하면 다음을 사용할 수 있습니다.

ls -ld -- *([1,4])

처음 4 개 파일을 나열합니다. zsh정렬하지 말라고해도 디렉토리의 전체 내용을 읽습니다 *(oN[1,4])( 그 목록 ls 정렬합니다).


1

어쩌면 이하 사용자의 요구에 더 적합?

 ls /usr/bin | less

저에게는 클래식 HDD가 장착 된 5 년 된 랩톱에서 즉시 작동하지만 헤드 속도도 동일합니다.

less조기 종료 할 수 있습니다 q.

1s 지연의 원인에 대한 귀하의 가정이 잘못되었지만 아마도 유닉스 풍미 또는 쉘, 덜 또는 헤드 명령에 달려 있다고 생각합니다.

Linux에서 GNU-ls를 사용하면

 ls -R /usr | less 

전체 출력이 실행 중이고 실행 중일 때 즉시 출력을 시작합니다. 따라서 적은 수의 시작 전에 확실히 완료되지 않습니다. 출력에 따라 일정한 지연 시간이 1 초 이상인지 확인할 수 있습니다.

1 초 지연에 다른 이유가 있다고 생각합니다 .HDD가 잠 들어 깨어날 필요가 있습니까?

아주 적은 파일에 대해서도 지연이 있습니까?


고맙지 만 나는 그런 것을 찾지 못했습니다. head와 마찬가지로 전체 ls결과 의 결과로 less가 실행됩니다 . 결과 수량을 제한하는 방법을 찾고있었습니다.
AndreDurao

@AndreDurao : 내 의견을 답변으로 옮겼습니다.
사용자가 알 수 없음

0
ls -lrth | tail

ls -lrth | tail -n 10

ls -lrth | grep *.gz | tail

죄송합니다. Abhishek이지만이 질문의 요점은 lsbash에 대한 명령을 제공하는 것입니다. 파이프 같은 명령 grep, head, tail또는 다른 사람은 후에 실행ls
AndreDurao

0
$ cut -f 1,n filename

첫 번째 n파일 을 가져 오는 작업을 수행 합니다. n추출하려는 파일 수입니다. 완전한 코드는 다음과 같습니다.

$ ls|cut -f 1,n file

1
ls | cut -f 1,n file당신이 텍스트의 각 줄에 출력 제 n 번째 필드 것이라고 제안 명령 file, 완전히의 출력을 무시합니다 ls. 이것은 원래 포스터에 필요한 것을 수행하지 않습니다.
telcoM

그렇습니다 당신은 맞습니다. 단지 수정 만 ls | head -n ... 이것은 반드시 작업을 수행합니다.
Ramandeep Singh 8:30에
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.