예를 들어, 이 for 루프에서는
for var in ?????
do
dummy command
done
나는 현재 있는 디렉터리의 모든 디렉터리를 반복할 수 있기를 원하지만 이는 알 수 없는 디렉터리 목록이므로 물음표가 있는 위치에 각 디렉터리를 쓸 수는 없습니다. 도움을 주시면 감사하겠습니다.
답변1
가장 간단한 것은 귀하의 요구 사항을 충족시키는 것입니다."현재 내가 있는 디렉토리의 모든 디렉토리를 반복합니다.", 와일드카드만 사용하세요.
for d in */
do
dummy_command "$d"
done
명령이 후행 슬래시를 처리할 수 없는 경우 $d
로 바꿔 제거할 수 있습니다."$d"
"${d%/}"
명령이 여러 인수를 허용할 수 있으면 루프를 전혀 반복할 필요가 없습니다.
dummy_command */
dummy_command
테스트의 예는 간단할 수 있습니다 echo
.
알아채다모든 경우에 패턴이 일치하지 않으면 */
문자 그대로 별표와 슬래시로 명령에 전달됩니다. 이것은 거의 확실히 당신이 원하는 것이 아닙니다.
루프 위에 이 줄을 추가하면 문제를 해결할 수 있지만 bash
그 지점부터 적용된다는 점에 유의하세요.
shopt -s nullglob # Expand unmatched wildcards to "nothing"
...상대편이 생기 shopt -u nullglob
거나 스크립트가 끝날 때까지
답변2
최소/최대 깊이와 같은 항목을 더 자세히 제어하려면 while 루프에서 find를 사용할 수 있습니다.
while IFS= read -r dir; do
echo "$dir"
done < <(find . -type d)
그런 다음 필요에 맞게 조회 옵션을 변경하면 됩니다. 공백이 있는 디렉토리 이름을 찾는 것처럼 할 수 있습니다.find . -type d -name '* *'
답변3
다음과 같이(파일 이름에 공백이 포함된 디렉터리를 반복적으로 나열합니다):
shopt -s globstar
dummy_command **/*' '*/
또는 for 루프 사용을 고집하는 경우:
shopt -s globstar
for dir in **/*' '*/
dummy_command "$dir"
done