*쉘에 의해 확장되는 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 [^.]*
세게 때리다
불행히도 bashglob 한정자가 없습니다. 따라서 전 세계적으로 도트 파일 포함을 사용하도록 설정했습니다. 에서 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, 즉는 *제외 점 파일 포함 .및 ..하지만 .*여전히 포함 .하고 ..(그리고 당신이 사용할 수 [.]*를 제외하고 숨겨진 파일을 확장 .하고 ..).