Zsh
mv Foo/*(DN) Bar/
atau
setopt -s glob_dots
mv Foo/*(N) Bar/
(Biarkan (N)
jika Anda tahu direktori tidak kosong.)
Pesta
shopt -s dotglob nullglob
mv Foo/* Bar/
Ksh93
Jika Anda tahu direktori tersebut tidak kosong:
FIGNORE='.?(.)'
mv Foo/* Bar/
Standar (POSIX) sh
for x in Foo/* Foo/.[!.]* Foo/..?*; do
if [ -e "$x" ]; then mv -- "$x" Bar/; fi
done
Jika Anda ingin membiarkan mv
perintah mengembalikan status kesalahan meskipun berhasil, itu jauh lebih sederhana:
mv Foo/* Foo/.[!.]* Foo/..?* Bar/
GNU find dan GNU mv
find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +
Temuan standar
Jika Anda tidak keberatan mengubah ke direktori sumber:
cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "$@" "$0"' ../Bar/ {} + -type d -prune
Berikut ini lebih detail tentang cara mengendalikan apakah file dot dicocokkan dengan bash, ksh93 dan zsh.
Pesta
Setel dotglob
opsi .
$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero
Ada juga GLOBIGNORE
variabel yang lebih fleksibel , yang dapat Anda atur ke daftar pola wildcard yang dipisahkan oleh usus besar untuk diabaikan. Jika tidak disetel (pengaturan default), shell berperilaku seolah-olah nilainya kosong jika dotglob
diatur, dan seolah-olah nilainya adalah .*
jika opsi tidak disetel. Lihat Ekspansi Nama File di manual. Direktori meresap .
dan ..
selalu dihilangkan, kecuali jika .
dicocokkan secara eksplisit oleh pola.
$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one
Ksh93
Atur FIGNORE
variabelnya . Jika tidak disetel (pengaturan default), shell berperilaku seolah-olah nilainya .*
. Untuk mengabaikan .
dan ..
, mereka harus dicocokkan secara eksplisit (manual dalam ksh 93s + 2008-01-31 menyatakan bahwa .
dan ..
selalu diabaikan, tetapi ini tidak dengan benar menggambarkan perilaku aktual).
$ echo *
none zero
$ FIGNORE='@(.|..)'
$ echo *
..two .one none zero
$ FIGNORE='n*'
$ echo *
. .. ..two .one zero
Anda dapat memasukkan file dot dalam suatu pola dengan mencocokkannya secara eksplisit.
$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero
Agar ekspansi keluar kosong jika direktori kosong, gunakan N
opsi pencocokan pola: ~(N)@(*|.[^.]*|..?*)
atau ~(N:*|.[^.]*|..?*)
.
Zsh
Setel dot_glob
opsi .
% echo *
none zero
% setopt dot_glob
% echo *
..two .one none zero
.
dan ..
tidak pernah cocok, bahkan jika polanya cocok dengan pemimpin .
secara eksplisit.
% echo .*
..two .one
Anda dapat menyertakan file dot dalam pola tertentu dengan D
kualifikasi glob .
% echo *(D)
..two .one none zero
Tambahkan N
kualifikasi glob untuk membuat ekspansi keluar kosong di direktori kosong: *(DN)
.
Catatan: Anda mungkin mendapatkan hasil ekspansi nama file dalam urutan yang berbeda (misalnya, none
diikuti oleh .one
diikuti oleh ..two
) berdasarkan pengaturan Anda dari LC_COLLATE
, LC_ALL
, dan LANG
variabel.