'ls'명령을 사용하여 파일 및 디렉토리 열거


11

ls현재 디렉토리에서 명령 을 실행 하고 출력을 얻으십시오.

$ ls
Applications Documents    Library      Music        Public
Desktop      Downloads    Movies       Pictures

나는 그들을 다음과 같이 열거하고 싶다 :

1. Applications
2. Desktop
3. Documents
4. Downloads
5. Library
6. Movies
7. Music
8. Pictures
9. Public

이것은 less중간 방식으로 사용하여 달성 할 수 있습니다

ls | less -N

그것들을 간단하게 열거하는 방법?


항상 이런 일이 일어나길 원하십니까? 첫 번째 경우, 답변의 명령 중 하나에 ls의 별명을 작성할 수 있습니다. 두 번째로 새 별칭 (예 : "lsn")을 명령에 만듭니다.
jamesqf

답변:


16

아니면 간단히 :

ls -b |nl -s '. ' -w 1
1. a\ file\ with\ nonewline
2. a\ file\ with\nnewline
3. a\ file\ with\ space
4. afile

부터 man nl:

-s, --number-separator=STRING
              add STRING after (possible) line number
-w, --number-width=NUMBER
              use NUMBER columns for line numbers

13

출력 ls을 다른 명령으로 파이프해야합니다 . 내 제안은 이런 식 으로 사용 awk하는 것입니다 .

$ ls -b --group-directories-first | awk '{print NR ". " $0}'
1. dir1
2. dir2
3. dir3
4. z-dir1
5. z-dir2
6. z-dir3
7. file1
8. file2
9. file3
10. file4
11. file5
12. file6
13. file7
14. file\nnewline
  • 이 파일 file\nnewline에는 \n옵션에 의해 이스케이프되는 개행 문자 가 이름에 포함되어 있습니다 -b.

  • 이 옵션 --group-directories-first은 파일보다 먼저 디렉토리를 출력합니다.

또 다른 가능한 방법은 for 루프를 사용하는 것입니다 (그러나이 경우 목록 구걸에 디렉토리를 배치하는 것이 더 어려워집니다).

n=1; for i in *; do echo $((n++)). $i; done

11

숫자 만 표시하는 경우 다음과 같은 몇 가지 옵션과 less -N방법이 있습니다.

$ ls |cat -n
$ ls |nl

사용자 정의 출력 번호 매기기 find를 원한다면 인쇄하고 싶은 것을 사용 하고 수행하는 것이 좋습니다 .

find . -exec bash -c 'for fnd; do printf "%d. %s\n" "$((++i))" "$fnd"; done ' _ {} +

POSIXly, 당신은 할 것입니다 :

find . -exec sh -c 'for fnd; do i=$((i+1)); printf "%d.\t%s\n" "$i" "$fnd"; done ' _ {} +

이 경우 i미리 초기화해야합니다.i=0; find ...
rexkogitans

-exec sh -c '....' 별도의 sh 셸에서 실행 되므로 반드시 여기에있는 것은 아닙니다 .
αғsнιη

3

짧은 Bash 스크립트를 사용 하여이 작업을 완전히 수행 할 수도 있습니다.

#!/bin/bash
set -eu
shopt -s nullglob

[ "$#" -eq 0 ] || cd -- "$1"
i=0
for f in *; do
    printf '%d. %s\n' "$((++i))" "${f//$'\n'/^N}"
done |
cat -vt

당신은 공상하고 9 개 이상의 결과를 위해 줄 번호를 채울 수도 있습니다.

#!/bin/bash
set -eu
shopt -s nullglob

[ "$#" -eq 0 ] || cd -- "$1"
ls=(*)
pad=${#ls[@]}
pad=${#pad}
i=0
for f in *; do
    printf '%*d. %s\n' "$pad" "$((++i))" "${f//$'\n'/^N}"
done |
cat -vt

용법

스크립트를 numbered-ls.sh현재 작업 디렉토리에 실행 파일로 저장했다고 가정하십시오 .

./numbered-ls.sh [DIRECTORY]

인수 DIRECTORY는 선택 사항이며 기본값은 현재 작업 디렉토리입니다.

설명

  1. 스크립트가 인수와 함께 호출 된 경우 작업 디렉토리를 첫 번째 인수의 경로로 변경하십시오.

  2. 현재 작업 디렉토리의 모든 항목을 일치시키고 살펴보십시오. 각 항목마다 카운터를 증가시키고 항목 이름과 함께 값을 인쇄하십시오. 항목 이름의 줄 바꿈 문자는로 바뀝니다 ^N.

  3. cat -vt터미널을 제어 문자로 해석 할 수있는 인쇄 할 수없는 문자가 포함 된 파일 이름을 처리하기 위해 출력을 파이프합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.