Bash 와일드카드는 숨겨진 파일을 확장하지 않습니다.

Bash 와일드카드는 숨겨진 파일을 확장하지 않습니다.

디렉터리의 모든 파일을 처리하는 bash 스크립트를 만들려고 합니다. 이러한 파일 이름은 모두 점으로 시작하므로 숨겨집니다. 와일드카드를 사용하여 디렉터리의 모든 항목을 가져오려고 하면 와일드카드가 확장되지 않습니다.

내 루프 코드는 이제 다음과 같습니다.

#!/bin/bash
shopt -s extglob

for i in "$(pwd)"/*; do
  echo "$i"
done

출력은 단지 입니다 /Users/.../*.

이는 숨겨진 파일을 구체적으로 다룬다는 점에서 다른 스레드와 다릅니다. 비슷한 파일을 test디렉토리에 추가하면 작동합니다. 알겠어요 /Users/.../test.

또한 터미널에서 별도로 실행해 보았지만 동일한 결과를 얻었습니다. 와일드카드 확장 숨기기 파일을 만드는 방법은 무엇입니까?

답변1

나는 그것을 생각했다! 좀 더 자세히 봐shopt에 대한 문서dotglob, 라는 점으로 시작하는 파일 이름을 포함하는 옵션이 있습니다 .

shopt -s dotglob스크립트 시작 부분에 추가했는데 이제 작동합니다. 이제 출력에 모든 숨겨진 파일과 디렉터리가 나열됩니다( ./및 제외 ../).

내 스크립트는 이제 다음과 같습니다.

#!/bin/bash
shopt -s extglob
shopt -s dotglob

for i in "$(pwd)"/*; do
  echo "$i"
done

답변2

dotglob이 없는 posix 솔루션

#!/bin/sh

for i in "$PWD"/* "$PWD"/.*
  do
    [ "${i##*/}" = . ] || \
    [ "${i##*/}" = .. ] || \
    [ "${i##*/}" = \* ] || \
    [ "${i##*/}" = .\* ] && continue

    echo "$i"
done

관련 정보