zsh
mv Foo/*(DN) Bar/
หรือ
setopt -s glob_dots
mv Foo/*(N) Bar/
(ออก(N)
หากคุณรู้ว่าไดเรกทอรีไม่ว่างเปล่า)
ทุบตี
shopt -s dotglob nullglob
mv Foo/* Bar/
Ksh93
หากคุณรู้ว่าไดเรกทอรีไม่ว่างเปล่า:
FIGNORE='.?(.)'
mv Foo/* Bar/
Standard (POSIX) sh
for x in Foo/* Foo/.[!.]* Foo/..?*; do
if [ -e "$x" ]; then mv -- "$x" Bar/; fi
done
หากคุณยินดีที่จะให้mv
คำสั่งคืนสถานะข้อผิดพลาดแม้ว่าจะสำเร็จก็เป็นเรื่องง่ายขึ้นมาก:
mv Foo/* Foo/.[!.]* Foo/..?* Bar/
GNU find และ GNU mv
find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +
ค้นหามาตรฐาน
หากคุณไม่สนใจที่จะเปลี่ยนเป็นไดเรกทอรีต้นทาง:
cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "$@" "$0"' ../Bar/ {} + -type d -prune
ต่อไปนี้เป็นรายละเอียดเพิ่มเติมเกี่ยวกับการควบคุมว่าไฟล์ดอทจับคู่เป็น bash, ksh93 และ zsh
ทุบตี
ตั้งค่าตัวเลือกdotglob
$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero
นอกจากนี้ยังมีGLOBIGNORE
ตัวแปรที่มีความยืดหยุ่นมากขึ้นซึ่งคุณสามารถตั้งค่าเป็นรายการของรูปแบบไวด์การ์ดที่คั่นด้วยเครื่องหมายโคลอนเพื่อละเว้น หากไม่ได้ตั้งค่า (การตั้งค่าเริ่มต้น) เชลล์จะทำงานเสมือนว่าค่านั้นว่างเปล่าหากdotglob
ตั้งค่าไว้และราวกับว่าค่านั้นเป็น.*
ตัวเลือกถ้าไม่ได้ตั้งค่า ดูการขยายชื่อไฟล์ในคู่มือ ไดเร็กทอรีที่แพร่หลาย.
และ..
ถูกละเว้นอยู่เสมอยกเว้นว่า.
ตรงกับรูปแบบโดยชัดแจ้ง
$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one
Ksh93
ตั้งค่าตัวแปรFIGNORE
หากไม่มีการตั้งค่า (ค่าเริ่มต้น), .*
เปลือกทำงานเป็นถ้าค่าเป็น หากต้องการละเว้น.
และ..
ต้องจับคู่อย่างชัดเจน (คู่มือใน ksh 93s + 2008-01-31 ระบุว่า.
และ..
จะถูกละเว้นเสมอ แต่สิ่งนี้ไม่ได้อธิบายพฤติกรรมที่แท้จริงอย่างถูกต้อง)
$ echo *
none zero
$ FIGNORE='@(.|..)'
$ echo *
..two .one none zero
$ FIGNORE='n*'
$ echo *
. .. ..two .one zero
คุณสามารถรวมไฟล์ dot ในรูปแบบโดยจับคู่กับไฟล์เหล่านั้นอย่างชัดเจน
$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero
จะมีการขยายตัวออกมาว่างเปล่าถ้าไดเรกทอรีที่ว่างเปล่าให้ใช้N
รูปแบบตัวเลือกที่ตรงกับ: หรือ~(N)@(*|.[^.]*|..?*)
~(N:*|.[^.]*|..?*)
zsh
ตั้งค่าตัวเลือกdot_glob
% echo *
none zero
% setopt dot_glob
% echo *
..two .one none zero
.
และ..
จะไม่ตรงกันแม้ว่ารูปแบบจะตรงกับส่วนนำ.
อย่างชัดเจน
% echo .*
..two .one
คุณสามารถรวมจุดไฟล์ในรูปแบบเฉพาะด้วยตัวระบุแบบD
หมุนได้
% echo *(D)
..two .one none zero
เพิ่มN
รอบคัดเลือก glob ที่จะทำให้การขยายตัวออกมาว่างเปล่าใน directory *(DN)
ว่าง:
หมายเหตุ: คุณอาจได้รับผลการขยายตัวชื่อไฟล์ในการสั่งซื้อที่แตกต่างกัน (เช่นnone
ตามด้วย.one
ตามด้วย..two
) ตามการตั้งค่าของคุณLC_COLLATE
, LC_ALL
และLANG
ตัวแปร