2014-02-05 2 views
0

저는 (재귀 적이 아닌) 디렉토리를 통해 반복하려하고 경로가 아닌 디렉토리 이름 만 나열하려고합니다.루프 스루 디렉토리와 리턴 디렉토리 이름

find /dir/* -type d -prune -exec basename {} \; 

이렇게하면 디렉토리에있는 디렉토리 목록이 반환되고 작동합니다.

folder 1 
this is folder2 

는 그리고 나는이 그래서 내가 한을 통해 루프를 원하는 :

for i in $(/dir/* -type d -prune -exec basename {} \;) 
do 
    echo ${i} 
done 

그러나 루프의 각 단어를 통해 반복하고 행 없습니다. 그 결과는 다음과 같습니다 :

folder 
1 
this 
is 
folder2 

나는 많은 스레드가 있다는 것을 알고 있지만 저에게는 잘 맞는 사람을 찾을 수 없습니다. 특히 이름에 공백이있는 경우.
누구든지이 문제를 해결하는 방법을 알고 있습니까?

답변

0

사용하는 대신 while 루프 :

find /dir/* -type d -prune -exec basename {} \; | while IFS= read -r line 
do 
    echo "$line" 
done 
+0

니스, 작동하는 것 같습니다. 나는 이걸로 일할거야. 감사. – Patrik

0

find /dir -maxdepth 1 -type d -printf %f

1

당신이 디렉토리 이름 다음 사용할 수 있습니다 통해 루프를 원하는 경우; 발견은 그 작업을 수행하는 더 좋은 방법을 결과를 통해

경우
(cd /dir && for f in */; do echo "$f"; done) 

당신이 루프 할 수 있습니다 : 그것은 (find -exec는 서브 쉘을 생성합니다 불구하고 서브 쉘을 산란을 방지하기 때문에

while read -r f; do 
    echo "$f" 
done < <(find /dir/ -type d -prune -exec basename '{}' \;) 

이 선호된다).