*
쉘에 의해 확장되는 glob입니다. 기본적으로 셸에는 .
선행을 .
그대로 입력 하지 않으면 이름이 (숨겨진 파일 또는 도트 파일이라고 함) 시작하는 파일은 포함되지 않습니다 .
*
또는 [.]*
또는 ?*
또는 *.*
또는 dir/*
dotfiles 포함되지 않습니다.
.*
또는 dir/.*
의지.
그래서 당신은 할 수 있습니다 :
mv -- * .* /dest/
그러나 등 일부 쉘 bash
(하지만 zsh
, mksh
아니다는 fish
의 확장이 있음)이 misfeature을 .*
인클루드 .
하고 ..
당신이 (내가 그것을 misfeature 부르는 이유 인 포함하도록 글로브를 원하고 일반적으로 결코) 여기 원하지 않는 특수 디렉토리 항목을.
이런 이유로 사람들은 때때로 (Bourne과 같은 껍질에서) 다음을 사용합니다.
mv -- * .[!.]* ..?* /dest/
그것은 숨겨지지 않은 파일과 일치하는 첫 번째 글러브, 첫 번째 파일 이름 .
은 다른 문자로 .
시작하고 세 번째 파일 이름 ..
은 적어도 하나의 문자로 시작 합니다.
그러나 일부 현대 껍질에는 더 나은 방법이 있습니다.
zsh
을 zsh
사용하면 (D)
glob 한정자를 사용하여 glob에 도트 파일이 포함되도록 지정할 수 있습니다 .
mv -- *(D) /dest/
zsh
또한 패턴이 일치하지 않으면 mv
명령이 실행 되지 않는 Bourne 쉘의 다른 잘못된 기능이 수정되었습니다 .
위에서 말했듯이 그것은 또한 그것의 globs에 포함 .
되지도 않을 것입니다...
mv -- * .* /dest/
안전합니다. 그러나 거기에는 파일 일치하지 않는 경우는 *
또는 일치하는 파일 .*
이 사용하는 것이 좋습니다 것 때문에 명령이 중단되지 않습니다 :
mv -- (*|.*) /dest/
다른 쉘과 마찬가지로 다음과 같이 모든 글로브에 점 파일을 포함 시키도록 강제 할 수 있습니다 (예 : 점 파일을 자주 포함시키지 않으려는 경우).
setopt dotglob
또는:
set -o dotglob
그 후, 특정 glob 가 dotfile을 포함 하지 않기를 원한다면, 그것을 쓸 수 있습니다 :
echo *(^D)
또는:
echo [^.]*
세게 때리다
불행히도 bash
glob 한정자가 없습니다. 따라서 전 세계적으로 도트 파일 포함을 사용하도록 설정했습니다. 에서 bash
, 구문은 다음과 같습니다
shopt -s dotglob
( [^.]*
숨겨진 파일이없는 글로브에 사용 ).
와 dotglob
, bash
포함되지 않습니다 .
도 ..
같은 globs와의 *
,하지만 여전히 같은 globs와 대한 않습니다 .*
.
당신은 설정하면 GLOBIGNORE
뭔가 비어에 변수를, 그 다음 자동으로 할 수 있습니다 dotglob
옵션을 제외 .
하고 ..
에서 .*
globs와 있지만에서 dir/.*
또는 .*/file
사람을 (!) 그 안전 장치가 꽤 쓸모가 있도록. 당신은 할 수 GLOBIGNORE='*/.:*/..:./*:../*:*/./*:*/../*'
있지만, 그것은 같은 globs의 휴식 것 */.
또는 ./*
나 ../*
.
더 나은 작업 주위는 사용하는 것 [.]*
또는 dir/[.]*
나 [.]*/file
(함께 dotglob
사용)를 제외하고 dotfiles을 확장 .
하고 ..
.
물고기
fish
글로브에는 .
nor가 포함 되지 않습니다 ..
. 일치하지 않으면 버전에 따라 zsh
(또는 bash -o failglob
) 또는 과 같이 작동합니다 bash -o nullglob
.
mv -- * .* /dest/
숨겨진 파일과 숨겨지지 않은 파일이 모두 있으면 작동합니다. 그렇지 않으면 YMMV 및 일부 버전 mv -- /dest
의 경우 파일이 없으면 호출 될 수 있습니다 .
ksh93
글로브 한정자가 ksh93
없습니다. 다음을 사용하여 glob에 도트 파일을 포함 할 수 있습니다.
FIGNORE='@(.|..)'
달리 bash
의 GLOBIGNORE
도 제대로하고있어, 문제 해결 .*
을 포함한 .
와 ..
.
야쉬
yash
이 dot-glob
옵션 ( set -o dot-glob
)하지만, 반대로 bash
, (심지어의 글로브 확장이 *
)를 포함 .
하고 ..
꽤 쓸모 정도.
tcsh
set globdot
처럼 작품 bash
, 즉는 *
제외 점 파일 포함 .
및 ..
하지만 .*
여전히 포함 .
하고 ..
(그리고 당신이 사용할 수 [.]*
를 제외하고 숨겨진 파일을 확장 .
하고 ..
).