디렉터리의 모든 파일을 처리하는 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