ls -Al에서 파일 이름(공백 포함)만 출력하는 방법은 무엇입니까?

ls -Al에서 파일 이름(공백 포함)만 출력하는 방법은 무엇입니까?

다음 구조의 파일이나 디렉터리 이름만 에코해야 합니다.

ls -Al | while read string
do
...
done

ls -Al산출:

drwxr-xr-x  12 s162103  studs         12 march 28 12:49 personal domain
drwxr-xr-x   2 s162103  studs          3 march 28 22:32 public_html
drwxr-xr-x   7 s162103  studs          8 march 28 13:59 WebApplication1

예를 들어, 다음을 시도하면:

ls -Al | while read string
do
echo "$string" | awk '{print $9}
done

그러면 공백이 없는 파일과 디렉터리만 출력됩니다. 파일이나 디렉토리에 "Personal Domain"과 같은 공백이 있으면 "Personal"이라는 단어만 표시됩니다.

매우 간단한 해결책이 필요합니다. 어쩌면 awk보다 더 나은 해결책이 있을 수도 있습니다.

답변1

출력은 실제로 구문 분석되어서는 안 됩니다.ls. 이것이 숙제이고 당신에게 이것을 하라고 요청한다면, 당신의 교수는 그들이 무슨 말을 하는지 전혀 모릅니다. 다음과 같은 작업을 수행해 보는 것은 어떨까요?

좋아요...

find ./  -printf "%f\n"

또는

for n in *; do printf '%s\n' "$n"; done

...나쁜...

만약 너라면정말를 사용하려면 ls다음을 수행하여 더욱 강력하게 만들 수 있습니다.

ls -lA | awk -F':[0-9]* ' '/:/{print $2}'

...그리고 못생긴 것들

만약 너라면~을 고집하다이 작업을 잘못되고 위험한 방식으로 수행하여 루프만 사용해야 하는 경우 while다음을 수행하십시오.

ls -Al | while IFS= read -r string; do echo "$string" | 
    awk -F':[0-9]* ' '/:/{print $2}'; done

하지만 진지하게, 그러지 마세요.

답변2

ls -A1*가 작동하지 않는 이유가 있나요 ?

예를 들어:

$ touch file1 file2 file\ with\ spaces
$ ls -Al
total 0
-rw-r--r-- 1 bahamat bahamat 0 Mar 30 22:31 file1
-rw-r--r-- 1 bahamat bahamat 0 Mar 30 22:31 file2
-rw-r--r-- 1 bahamat bahamat 0 Mar 30 22:31 file with spaces
$ ls -A1
file1
file2
file with spaces
$

* 참고: 대문자 A와 숫자 1입니다.

답변3

왜 아무도 이 간단한 명령을 언급하지 않았는지 궁금합니다.

ls -a | sort

답변4

당신은 그것을 사용할 수 있습니다 :

ls -lA | awk '{print $9}' 

이름에 공백이 있는 파일이 없으면 작동합니다... 그렇지 않으면 약간 더 복잡한 접근 방식이 가능할 수 있습니다.

ls -lA | awk '{$1=$2=$3=$4=$5=$6=$7=$8=""; print $0;}

관련 정보