다음 구조의 파일이나 디렉터리 이름만 에코해야 합니다.
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;}