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 extglobtrước (đặt nó vào trong ~/.bashrc). Theo zsh, bạn cần chạy setopt -o ksh_globtrướ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ừ .svnthư 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_globtrướ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 .svnthư 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ì .svnnó 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_dotstù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_globNế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) 2010Mộ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 extendedglobtrướ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 * newdirlàm việc cho tôi, mặc dù có lỗi.