Zsh
mv Foo/*(DN) Bar/
hoặc là
setopt -s glob_dots
mv Foo/*(N) Bar/
(Để lại (N)
nếu bạn biết thư mục không trống.)
Bash
shopt -s dotglob nullglob
mv Foo/* Bar/
Ksh93
Nếu bạn biết thư mục không trống:
FIGNORE='.?(.)'
mv Foo/* Bar/
Tiêu chuẩn (POSIX) sh
for x in Foo/* Foo/.[!.]* Foo/..?*; do
if [ -e "$x" ]; then mv -- "$x" Bar/; fi
done
Nếu bạn sẵn sàng để mv
lệnh trả về trạng thái lỗi mặc dù đã thành công, thì đơn giản hơn nhiều:
mv Foo/* Foo/.[!.]* Foo/..?* Bar/
GNU tìm và GNU mv
find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +
Tìm tiêu chuẩn
Nếu bạn không thay đổi thư mục nguồn:
cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "$@" "$0"' ../Bar/ {} + -type d -prune
Dưới đây là chi tiết hơn về việc kiểm soát xem các tệp chấm có khớp trong bash, ksh93 và zsh hay không.
Bash
Đặt dotglob
tùy chọn .
$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero
Ngoài ra còn có GLOBIGNORE
biến linh hoạt hơn mà bạn có thể đặt thành danh sách các mẫu ký tự đại diện được phân tách bằng dấu hai chấm để bỏ qua. Nếu bỏ đặt (cài đặt mặc định), trình bao hoạt động như thể giá trị trống nếu dotglob
được đặt và như thể giá trị là .*
nếu tùy chọn không được đặt. Xem Mở rộng tên tệp trong hướng dẫn. Các thư mục phổ biến .
và ..
luôn bị bỏ qua, trừ khi .
được khớp rõ ràng theo mẫu.
$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one
Ksh93
Đặt FIGNORE
biến . Nếu không được đặt (cài đặt mặc định), shell sẽ hoạt động như thể giá trị là .*
. Để bỏ qua .
và ..
, chúng phải được khớp một cách rõ ràng (hướng dẫn trong ksh 93s + 2008-01-31 nói rằng .
và ..
luôn bị bỏ qua, nhưng điều này không mô tả chính xác hành vi thực tế).
$ echo *
none zero
$ FIGNORE='@(.|..)'
$ echo *
..two .one none zero
$ FIGNORE='n*'
$ echo *
. .. ..two .one zero
Bạn có thể bao gồm các tệp chấm trong một mẫu bằng cách khớp chúng rõ ràng.
$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero
Để mở rộng ra trống nếu thư mục trống, sử dụng N
tùy chọn khớp mẫu: ~(N)@(*|.[^.]*|..?*)
hoặc ~(N:*|.[^.]*|..?*)
.
Zsh
Đặt dot_glob
tùy chọn .
% echo *
none zero
% setopt dot_glob
% echo *
..two .one none zero
.
và ..
không bao giờ được khớp, ngay cả khi mô hình khớp với hàng đầu .
một cách rõ ràng.
% echo .*
..two .one
Bạn có thể bao gồm các tệp chấm trong một mẫu cụ thể với D
vòng loại toàn cầu .
% echo *(D)
..two .one none zero
Thêm N
vòng loại toàn cầu để làm cho việc mở rộng trở nên trống rỗng trong một thư mục trống : *(DN)
.
Lưu ý: bạn có thể có được kết quả mở rộng tên tập tin trong đơn đặt hàng khác nhau (ví dụ, none
tiếp theo .one
tiếp theo ..two
) dựa trên các thiết lập của bạn trong những LC_COLLATE
, LC_ALL
và LANG
các biến.