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

다음의 출력에서 ​​각 줄을 반복하고 싶습니다. 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

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



답변

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


답변

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

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

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


답변

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

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


답변

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

find . -d 1 -prune -ls

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

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

줄을 세지 만 파일에서만?

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


답변

ls (1) 명령의 출력 방향 재 지정과 함께 read (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


답변