*เป็น glob ที่ถูกขยายโดยเชลล์ โดยค่าเริ่มต้นหอยไม่รวมไฟล์ที่มีชื่อขึ้นต้นด้วย.(เรียกว่าไฟล์ที่ซ่อนอยู่หรือ dotfiles) เว้นแต่ว่าชั้นนำ.จะถูกป้อนอย่างแท้จริง
*หรือ[.]*หรือ?*หรือ*.*หรือdir/*จะไม่รวม dotfiles
.*หรือdir/.*จะ
ดังนั้นคุณสามารถทำได้:
mv -- * .* /dest/
อย่างไรก็ตามเชลล์บางตัวรวมถึงbash(แต่ไม่ใช่zsh, mkshและfish) มีความผิดพลาดที่การขยายของ.*รวม.และ..รายการไดเร็กทอรีพิเศษ, ซึ่งคุณไม่ต้องการที่นี่ (และโดยทั่วไปไม่ต้องการให้ glob รวมซึ่งเป็นเหตุผลที่ฉันเรียกมันว่า
ด้วยเหตุผลดังกล่าวคุณจะพบว่าบางครั้งผู้คนใช้ (ในเชลล์คล้ายบอร์น):
mv -- * .[!.]* ..?* /dest/
นั่นคือสาม globs หนึ่งตรงกับไฟล์ที่ไม่ซ่อนแรกคนที่สองชื่อไฟล์ที่เริ่มต้นด้วย.ที่ตามตัวอักษรอื่นที่ไม่ใช่.และ 3 หนึ่งชื่อไฟล์ที่เริ่มต้นด้วย..ที่ตามตัวอักษรอย่างน้อยหนึ่ง
อย่างไรก็ตามกระสุนสมัยใหม่บางตัวมีวิธีที่ดีกว่า
zsh
ด้วยzshคุณสามารถใช้ตัว(D)ระบุแบบกลมเพื่อระบุว่ารูปแบบวงกลมควรมีดอทไฟล์
mv -- *(D) /dest/
zshยังแก้ไขว่าการบอร์เชลล์เชลล์ผิดพลาดอื่น ๆ ในกรณีที่รูปแบบไม่ตรงกันmvคำสั่งจะไม่ทำงาน
ดังที่ได้กล่าวไว้ข้างต้นมันจะไม่รวม.หรือ..อยู่ในความโกลาหลดังนั้น
mv -- * .* /dest/
จะปลอดภัย อย่างไรก็ตามหากไม่มีไฟล์ที่ตรงกัน*หรือไม่มีไฟล์ที่ตรง.*กับคำสั่งจะถูกยกเลิกดังนั้นควรใช้:
mv -- (*|.*) /dest/
เช่นเดียวกับในเปลือกหอยอื่น ๆ คุณสามารถบังคับ globs ทั้งหมดให้รวม dotfiles (ตัวอย่างเช่นถ้าคุณพบว่าตัวเองต้องการ dotfiles รวมบ่อยกว่า) ด้วย:
setopt dotglob
หรือ:
set -o dotglob
หลังจากนั้นหากคุณต้องการให้ glob เฉพาะไม่รวม dotfiles คุณสามารถเขียนมันได้:
echo *(^D)
หรือ:
echo [^.]*
ทุบตี
น่าเสียดายที่bashไม่มีตัวระบุ glob ดังนั้นคุณเหลือที่เปิดใช้งานการรวม dotfile ทั่วโลก ในbashไวยากรณ์คือ:
shopt -s dotglob
(และใช้[^.]*สำหรับ globs โดยไม่มีไฟล์ที่ซ่อนอยู่)
ด้วยdotglob, bashไม่รวม.มิได้..ใน globs เหมือน*แต่ยังคงไม่สำหรับ globs .*เช่น
หากคุณตั้งค่าGLOBIGNOREตัวแปรเป็นสิ่งที่ไม่ว่างเปล่ามันจะเปิดใช้งานdotglobตัวเลือกโดยอัตโนมัติและแยก.และ..ออกจาก.*globs แต่ไม่ใช่จากdir/.*หรือ.*/fileวัตถุ (!) เพื่อให้การป้องกันไม่มีประโยชน์ คุณสามารถทำGLOBIGNORE='*/.:*/..:./*:../*:*/./*:*/../*'แต่แล้วมันจะทำลาย globs เหมือน*/.หรือหรือ./*../*
ทำงานได้ดีขึ้นรอบ ๆ คือการใช้[.]*หรือdir/[.]*หรือ[.]*/file(ที่มีdotglobการเปิดใช้งาน) เพื่อขยาย dotfiles ยกเว้นและ...
ปลา
fishglobs ไม่รวมมิได้. ..เมื่อไม่มีการแข่งขันขึ้นอยู่กับรุ่นก็จะทำงานเหมือนอย่างใดอย่างหนึ่งzsh(หรือbash -o failglob) bash -o nullglobหรือ
mv -- * .* /dest/
จะทำงานหากมีทั้งไฟล์ที่ซ่อนและไม่ซ่อน มิฉะนั้น YMMV และในบางเวอร์ชันอาจเรียกได้mv -- /destว่าไม่มีไฟล์เลย
ksh93
ไม่มีตัวระบุแบบกลมในตัวksh93ใดตัวหนึ่ง คุณสามารถรวม dotfiles ใน globs ด้วย:
FIGNORE='@(.|..)'
ขัดกับbash's GLOBIGNORE, ที่ทำอย่างถูกต้องและยังแก้ไขปัญหาของการ.*รวมและ...
Yash
yashมีdot-globตัวเลือก ( set -o dot-glob) แต่ตรงกันข้ามกับbashการขยาย glob (แม้กระทั่ง*) รวมถึง.และ..ดังนั้นจึงไม่มีประโยชน์สวย
tcsh
set globdot
ธิเช่นเดียวกับในbashที่มี*รวมถึงไฟล์ dot ยกเว้น.และ..แต่.*ยังรวมถึง.และ..(และคุณสามารถใช้[.]*เพื่อขยายไฟล์ที่ซ่อนยกเว้น.และ..)