Câu trả lời:
Theo ksh, bash hoặc zsh:
svn mv !(2010) 2010
Trong bash, bạn cần chạy shopt -s extglob
trước (đặt nó vào trong ~/.bashrc
). Theo zsh, bạn cần chạy setopt -o ksh_glob
trước (đặt nó vào trong ~/.zshrc
).
Điều này không di chuyển các tập tin dấu chấm (các tập tin có tên bắt đầu .
). Nếu bạn có một số, di chuyển chúng riêng biệt. Hãy cẩn thận để loại trừ .svn
thư mục nếu bạn có. Trong ksh hoặc zsh:
svn mv !(2010) .!(svn) 2010
Trong bash, điều này phức tạp hơn vì bạn cũng cần loại trừ rõ ràng .
và ..
.
svn mv !(2010) .!(svn|.|) 2010
Zsh cũng có một cú pháp khác, ngắn hơn, yêu cầu chạy setopt -o extended_glob
trước (một lần nữa, đặt cái này vào ~/.zshrc
):
svn mv {^,}2010
Mở rộng cú đúp đầu tiên đi vào chơi, kết quả là svn mv ^2010 2010
. Sau đó, mẫu ^2010
(một lối tắt cho các tập tin phù hợp với các tập tin *
nhưng không 2010
được mở rộng).
Nếu bạn có một .svn
thư mục, bạn sẽ cần loại trừ nó khỏi di chuyển. Theo mặc định, điều này là ổn, vì .svn
nó không khớp với *
(đó là một tệp chấm). Tuy nhiên, có những biến chứng:
Nếu bạn đã đặt glob_dots
tùy chọn, bạn cũng cần loại trừ .svn
:
svn mv !(2010|.svn) 2010 # requires setopt ksh_glob
svn mv *~(.svn|2010) 2010 # requires setopt extended_glob
Nếu bạn có tệp chấm và bạn chưa đặt glob_dots
, bạn sẽ cần di chuyển chúng một cách riêng biệt:
svn mv {^,}2010
svn mv .*~.svn 2010
Để làm điều đó trong một lần:
svn mv *~(.svn|2010)(D) 2010
Một cách khác có thể hoạt động trong zsh trong trường hợp này (nếu bạn không có thư mục con) là svn mv *(.D) 2010
, chỉ khớp với các tệp thông thường ( .
) bao gồm các tệp chấm ( D
).
ZSH có một toán tử toàn cầu hữu ích để khớp mọi thứ trừ một tên cụ thể , ^
. Vì vậy, điều này sẽ hoạt động (nhưng đó là ZSH cụ thể và setopt extendedglob
trước tiên bạn cần phải có ):
$ svn mv ^2010 2010
!()
cú pháp làm việc với zsh
. Làm thế nào để ^
cú pháp khác nhau? Nó không hoạt động trong vỏ của tôi, tôi cần cài đặt tùy chọn nào để kích hoạt nó?
setopt extendedglob
. Tôi không biết về !()
nó, nghe có vẻ như là một cách xuyên suốt hơn để làm điều đó
svn mv {^,}2010
để tránh gõ tên thư mục hai lần
Nếu các tệp của bạn có tên thuần hóa tên tuổi (không có khoảng trắng, ký tự không thể in hoặc \[?*
):
svn mv $(ls | grep -vx 2010) 2010
mv
. Tuy nhiên, vớimv
,mv * newdir
làm việc cho tôi, mặc dù có lỗi.