![Bash 와일드카드는 숨겨진 파일을 확장하지 않습니다.](https://linux55.com/image/179272/Bash%20%EC%99%80%EC%9D%BC%EB%93%9C%EC%B9%B4%EB%93%9C%EB%8A%94%20%EC%88%A8%EA%B2%A8%EC%A7%84%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%ED%99%95%EC%9E%A5%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
디렉터리의 모든 파일을 처리하는 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