ls -l 출력의 각 행에 대해 반복


120

다음의 출력에서 ​​각 줄을 반복하고 싶습니다. ls -l /some/dir/*

지금 시도하고 있습니다. for x in $(ls -l $1); do echo $x; done

그러나 이것은 줄의 각 요소를 개별적으로 반복하므로 다음을 얻습니다.

-r--r-----
1
ivanevf
eng
1074
Apr
22
13:07
File1

-r--r-----
1
ivanevf
eng
1074
Apr
22
13:17
File2

하지만 각 줄을 전체적으로 반복하고 싶습니다. 어떻게하나요?


1
특별한 이유가없는 한 항상 변수 (및 명령 출력)를 인용하십시오.
glenn jackman

답변:


247

IFS를 다음과 같이 개행으로 설정하십시오.

IFS='
'
for x in `ls -l $1`; do echo $x; done

IFS를 영구적으로 설정하지 않으려면 주변에 하위 셸을 두십시오.

(IFS='
'
for x in `ls -l $1`; do echo $x; done)

또는 동안 사용 | 대신 읽기 :

ls -l $1 | while read x; do echo $x; done

동일한 셸 수준에서 while / read를 실행하는 옵션이 하나 더 있습니다.

while read x; do echo $x; done << EOF
$(ls -l $1)
EOF

12
반면에 배관 때주의, 그동안은 주요 공정 변수를 변경할 수 있음을 의미 서브 쉘에서 실행됩니다
Reorx

1
여기서 $ 1은 무엇을합니까? 인수를 받아들이는 스크립트에서 이것을 사용해야합니다. $ 1는 물건을 버리고 있습니다. 동일한 효과를 얻으려면 $ 1 대신 무엇을 넣을 수 있습니까? 두 번째 솔루션을 사용하고 싶습니다.
noob-in-need

@ noob-in-need 나열하려는 디렉토리로
바꾸십시오

1
당신이 원할 수도 있고 read -r그렇지 않으면 bash는 데이터에서 이스케이프되지 않은 백 슬래시를 제거합니다.
Brian Gordon

6

각 라인으로 무엇을하고 싶은지에 따라 다릅니다. awk는 이러한 유형의 처리에 유용한 유틸리티입니다. 예:

 ls -l | awk '{print $9, $5}'

.. 내 시스템에서 디렉토리에있는 각 항목의 이름과 크기를 인쇄합니다.


3

이미 언급했듯이 awk는이를위한 올바른 도구입니다. awk를 사용하지 않으려면 "ls -l"의 출력을 한 줄씩 구문 분석하는 대신 모든 파일을 반복하고 다음과 같이 각 개별 파일에 대해 "ls -l"을 수행 할 수 있습니다.

for x in * ; do echo `ls -ld $x` ; done

3

find명령을 시도 할 수도 있습니다 . 현재 디렉토리에있는 파일 만 원하는 경우 :

find . -d 1 -prune -ls

각각에 대해 명령을 실행 하시겠습니까?

find . -d 1 -prune -exec echo {} \;

줄을 세지 만 파일에서만?

find . -d 1 -prune -type f -exec wc -l {} \;


찾기가 깨졌습니다. 종종 이상한 오류 메시지가 나타납니다. 명령 줄이 완벽하게 유효 할 때 도움을 주려고합니다. 일단이 작업을 시작하면 다음에 재부팅 할 때까지 중지되지 않는 것 같습니다 (MAYBE). 때로는 오류와 관련하여 본질적으로 무작위로 보입니다. 버그를 신고 할 수있는 방법을 모르겠습니다.
Jim Michaels 2014 년

1

ls (1) 명령의 출력 방향 재 지정과 함께 read (1) 유틸리티는 원하는 작업을 수행합니다.


-1

그래서 왜 아무도 처리하고 싶지 않은 부분을 제거하는 옵션을 사용하도록 제안하지 않았습니다.

최신 데비안에서는 다음과 같이 파일을 가져옵니다.

ls --format=single-column 

또한 전체 디렉토리를 사용하는 경우 실행중인 디렉토리에주의를 기울일 필요가 없습니다.

ls --format=single-column /root/dir/starting/point/to/target/dir/

이 마지막 명령은 위를 사용하고 있으며 다음 출력을 얻습니다.

bot@dev:~/downloaded/Daily# ls --format=single-column /home/bot/downloaded/Daily/*.gz
/home/bot/downloaded/Daily/Liq_DailyManifest_V3_US_20141119_IENT1.txt.gz
/home/bot/downloaded/Daily/Liq_DailyManifest_V3_US_20141120_IENT1.txt.gz
/home/bot/downloaded/Daily/Liq_DailyManifest_V3_US_20141121_IENT1.txt.gz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.