*
kabuk tarafından genişletilen bir küredir. Varsayılan olarak mermiler .
, önde gelmedikçe adı bir ile başlayan dosyaları (gizli dosyalar veya dotfiles olarak adlandırılır) içermez.
tam olarak girilmedikçe .
*
veya [.]*
veya ?*
veya *.*
veya dir/*
nokta dosyaları içermeyecektir.
.*
ya da dir/.*
olacak.
Böylece şunları yapabilirsiniz:
mv -- * .* /dest/
Ancak dahil olmak üzere bazı kabukları bash
(ancak zsh
, mksh
ne de fish
genişlemesi olduğunu) o misfeature var .*
içerir .
ve ..
size (Ben bir misfeature diyoruz neden olan içerecek bir topak istiyorum ve genellikle hiç) burada istemiyoruz özel dizin girişlerini.
Bu nedenle, bazen insanların (Bourne benzeri kabuklarda) kullandığını göreceksiniz:
mv -- * .[!.]* ..?* /dest/
Bu üç glob, ilki gizli olmayan dosyalarla eşleşiyor, ikincisi dosya adları ile başlayan ve .
ardından başka bir karakter.
ve 3. biriyle başlayan dosyalardan ..
sonra en az bir karakter.
Ancak bazı modern mermilerin daha iyi yolları var
zsh
İle zsh
, (D)
glob'un dotfiles içermesi gerektiğini belirtmek için glob niteleyicisini kullanabilirsiniz :
mv -- *(D) /dest/
zsh
ayrıca Bourne kabuğunun diğer yanlış özelliklerinin, eğer desen eşleşmezse, mv
komutun çalıştırılmayacağı .
Yukarıda belirtildiği gibi, asla kürelerini .
de içermez ..
, bu yüzden
mv -- * .* /dest/
güvenli olacak. Bununla birlikte, eşleşen bir dosya *
yoksa veya .*
komutla eşleşen hiçbir dosya iptal edilirse, bu nedenle kullanmak daha iyi olur:
mv -- (*|.*) /dest/
Diğer bazı kabuklarda olduğu gibi, tüm glob'ları dotfiles eklemeye zorlayabilirsiniz (örneğin kendinizi dotfiles'i daha sık dahil etmek istemiyorsanız):
setopt dotglob
veya:
set -o dotglob
Belirli bir topak istiyorsanız Bundan sonra değil dotfiles dahil etmek, bunu yazabiliriz:
echo *(^D)
Veya:
echo [^.]*
darbe
Ne yazık ki bash
glob elemeleri yok. Böylece global olarak dotfile dahil etmeyi etkinleştirebilirsiniz. İçinde bash
sözdizimi:
shopt -s dotglob
(ve [^.]*
gizli dosyaları olmayan globlar için kullanın ).
İle dotglob
, bash
içermez .
ne de ..
benzeri Neználkovo içinde *
, ama yine de böyle Neználkovo için yaptığı .*
.
Eğer ayarlarsanız GLOBIGNORE
şey boş olmayan değişkeni, daha sonra otomatik olarak sağlayan dotglob
seçeneği ve Kapsam dışı .
ve ..
gelen .*
Neználkovo ancak gelen dir/.*
veya .*/file
olanları (!) O koruma oldukça işe yaramaz böylece. Yapabilirsin GLOBIGNORE='*/.:*/..:./*:../*:*/./*:*/../*'
ama sonra globları kırabilir */.
ya da./*
ya ../*
.
Daha iyi bir iş etrafında kullanmaktır [.]*
ya dir/[.]*
ya [.]*/file
(ile dotglob
hariç dotfiles genişletmek için etkin) .
ve..
.
balık
fish
Neználkovo içermez .
ne de ..
. Sürüm eşleşmediğinde, sürüme bağlı olarak, zsh
(veya bash -o failglob
) veya gibi çalışır bash -o nullglob
.
mv -- * .* /dest/
Hem gizli hem de gizli olmayan dosyalar varsa çalışır. Aksi takdirde, YMMV ve bazı sürümlerde,mv -- /dest
hiç dosya yoksa .
ksh93
Hiçbir glob niteleyici de ksh93
. Glob'lara nokta dosyaları aşağıdakileri ekleyebilirsiniz:
FIGNORE='@(.|..)'
Aksine bash
'ın GLOBIGNORE
da düzgün yapılmazsa ve oluyor, sorununu giderir .*
dahil .
ve ..
.
yash
yash
bir dot-glob
seçenek ( set -o dot-glob
) vardır, ancak aksine bash
, glob genişletmeleri (hatta *
) içerir .
ve ..
bu yüzden oldukça işe yaramaz.
tcsh
set globdot
Gibi İşleri bash
, yani *
hariç nokta dosyaları içerir .
ve ..
ancak .*
hala içerir .
ve ..
(ve kullanabileceğiniz [.]*
hariç gizli dosyaları genişletmek .
ve ..
).