Sử dụng biểu thức chính quy với cp


11

Đây là một câu hỏi đơn giản. Tôi đang cố gắng sao chép tất cả các tệp trong thư mục hiện tại bắt đầu bằng "trục-2" và kết thúc bằng ".jar" vào thư mục đích, giả sử đó là ~ / MyDirectory. Suy nghĩ đầu tiên của tôi là thử

cp '^axis2.*jar$' ~/MyDirectory

Nhưng điều này không hiệu quả. Tôi thậm chí không chắc chắn tôi có thể sử dụng biểu thức thông thường với cp. Tôi cũng đã không thực sự sử dụng các biểu thức chính quy trong một thời gian và cú pháp của tôi có thể hoàn toàn tắt. Khi tôi thử cp này, chỉ xuất ra thông báo lỗi "Không có tệp hoặc thư mục như vậy". Có ai có bất kỳ đề nghị về làm thế nào để đi về điều này? Cảm ơn!

Câu trả lời:


15

Shell UNIX sử dụng các mẫu toàn cục , không phải biểu thức chính quy. Vì vậy, nếu bạn muốn khớp tên tệp bắt đầu bằng axis2và kết thúc bằng .jar, bạn sử dụng:

cp axis2*.jar /destination/directory

Cảm ơn rất nhiều! Tôi đã tự mình tìm ra nó, nhưng tôi không biết về mô hình toàn cầu nên điều đó hữu ích và nhiều thông tin.
Nick Van Hoogenstyn

7

Nếu bạn có sẵn findGNU và GNU cp, bạn có thể sử dụng các biểu thức chính quy như trong lệnh sau:

find . -maxdepth 1 -regextype posix-basic -regex '.*/axis2[^/]*jar$' \
       -exec cp -t ~/MyDirectory {} +

Điều này có thể hữu ích nếu không phải mô hình toàn cầu cũng như bash mô hình toàn cầu mở rộng phù hợp với nhu cầu của bạn.


0

Tôi thực sự thích cú pháp regex của renametập lệnh perl (của Robin Barker và Larry Wall), vd:

rename "s/OldFile/NewFile/" OldFile*

OldFile.cOldFile.hđược đổi tên thành NewFile.cNewFile.h, tương ứng

Tôi chỉ đơn giản muốn điều tương tự chính xác với một lệnh sao chép:

copy "s/OldFile/NewFile/" OldFile*

Vì vậy, tôi đã sao chép tập lệnh đó và thay đổi câu lệnh đổi tên thành sao chép qua File::Copy. Et voila! Một lệnh sao chép với cú pháp perl-regex: jcward / vopy .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.