설정

설정

.tar.gz다음 명령을 사용하여 모든 파일을 나열하려고합니다 .

ls *.tar.gz -l

...다음 목록이 표시됩니다.

-rw-rw-r-- 1 osm osm  949 Nov 27 16:17 file1.tar.gz
-rw-rw-r-- 1 osm osm  949 Nov 27 16:17 file2.tar.gz

그러나 다음과 같이 나열하면 됩니다.

file1.tar.gz 
file2.tar.gz

그리고 둘 다:

file1.tar.gz file2.tar.gz

이것이 어떻게 "올바르게" 수행됩니까?

답변1

-1옵션(소문자 "L"이 아닌 숫자 "one")은 다른 정보 없이 한 줄에 하나의 파일을 나열합니다.

ls -1 -- *.tar.gz

답변2

파일 이름만 원하면 다음을 사용할 수 있습니다 printf.

printf '%s\n' *.tar.gz

... 쉘은 *.tar.gz와일드카드 문자를 파일 이름으로 확장하고 printf인쇄하며, 각 문자 뒤에 개행 문자가 옵니다. 이 출력은 약간 다릅니다.하나ls줄 바꿈이 포함된 파일 이름의 경우:

설정

$ touch file{1,2}.tar.gz
$ touch file$'\n'3.tar.gz

엘에스

$ ls -1 -- *.tar.gz
file1.tar.gz
file2.tar.gz
file?3.tar.gz

인쇄 기능

$ printf '%s\n' *.tar.gz
file1.tar.gz
file2.tar.gz
file
3.tar.gz

답변3

ls출력이 파이프될 때 동작이 다릅니다. 예를 들어:

ls          # outputs filenames in columns
ls | cat    # passes one filename per line to the cat command

따라서 모든 파일(한 줄에 하나씩)을 보려면 *.tar.gz다음을 수행하십시오.

ls *.tar.gz | cat

하지만 만약 당신이아니요출력을 파이프하고 싶습니까? 즉, ls파일 이름을 파이핑하지 않고 강제로 한 줄로 출력하는 방법이 있습니까 ?

예, -1스위치가 있습니다. (이것은 숫자 1이 포함된 대시입니다.) 따라서 다음을 사용할 수 있습니다.

ls -1             # shows all (non-hidden) files, one per line
ls -1 *.tar.gz    # shows only *.tar.gz files, one per line

답변4

약간 우회하는 길미친방법:

for i in *.tar.gz; do
    echo "$i"
done

편집: 이상한 파일 이름을 처리하기 위해 따옴표를 추가했습니다.

관련 정보