*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, mkshne de fishgeniş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 bashglob elemeleri yok. Böylece global olarak dotfile dahil etmeyi etkinleştirebilirsiniz. İçinde bashsözdizimi:
shopt -s dotglob
(ve [^.]*gizli dosyaları olmayan globlar için kullanın ).
İle dotglob, bashiç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 dotglobseçeneği ve Kapsam dışı .ve ..gelen .*Neználkovo ancak gelen dir/.*veya .*/fileolanları (!) 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 dotglobhariç dotfiles genişletmek için etkin) .ve.. .
balık
fishNezná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 GLOBIGNOREda düzgün yapılmazsa ve oluyor, sorununu giderir .*dahil .ve ...
yash
yashbir dot-globseç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 ..).