2011-02-11 2 views
1

Peter Seebach의 "Beginning Portable Shell Scripting"책에는 현재 디렉터리의 모든 하위 디렉터리 내용을 나열하는 예제가 나와 있습니다.현재 디렉터리의 모든 하위 디렉터리 내용 - 구문 ls 대 globbing

#!/bin/sh 
/bin/ls | while read file 
do 
    if test -d "$file"; then 
    (cd "$file" && ls) 
    fi 
done 

나는 ls를 파싱하는 것이 좋지 않으며 globbing이 바람직하다는 것을 알게되었습니다. 저자가 이식성 문제로 파싱을 선택했다고 생각하십니까? 내가 할 것

:

#!/bin/sh 
for file in * 
do 
if test -d "$file"; then 
    (cd "$file" && ls) 
fi 
done 

감사합니다,

누군가

답변

3

두 솔루션 모두 이상한 파일 이름에 대한 강력하지 않으며이 시작 디렉토리를 처리 할 ".". 안구 사용자 또는 소화 추가 스크립트 중 하나, 나는이 사용 발견, 예컨대 :

find . -maxdepth 1 -type d -exec ls '{}' ';'

을 작성하지만, 첫 번째 I 출력이 실제로 필요한 사항을 질문 것입니다.

for/while ... do ... done 루프를 사용하여 많은 프로세스 포크를 처리하는 데 필요한 "찾기"작업을 수행 할 수 있습니다.

+0

수 없습니다까지 두 번 이상 : 귀하의 질문에 구체적인 사례를 들어

, 당신은보다 더 아무것도 사용하지 할 수 있습니다. –

+0

' ';''대신'+'를 사용할 수 있습니다. 또한,'-maxdepth'는 GNU find에만 적용됩니다. –

2

Globbing is much preferred over parsing ls 공백 및 다른 문자가 포함 된 파일 이름을 처리하므로이 파일을 사용하십시오.

ls */ 
+0

동의하지만, 나는'find'를 사용하여'for' 루프를 제거하는 방법을 선호합니다. –

+0

이 경우 ls를 사용하면 공백 및 다른 문자가 포함 된 파일 이름이 처리됩니다. 문제가되는 유일한 문자는 개행 문자입니다. –

관련 문제