Sao chép tập tin với nhiều phần mở rộng


22

Tôi muốn sao chép các tệp có nhiều phần mở rộng vào một thư mục đích.

Ví dụ: tôi có thể sử dụng lệnh sau để sao chép tất cả các tệp .txt trong thư mục làm việc sang thư mục có tên destination:

cp -v *.txt destination/

Và tôi có thể sử dụng cách sau để sao chép tất cả các thư mục .png trong thư mục làm việc sang destination:

cp -v *.png destination/

Nhưng sẽ tốn thời gian để nhập chúng dưới dạng các lệnh riêng biệt (ngay cả khi sử dụng lịch sử lệnh). Vì vậy, có cách nào mà tôi có thể nói cpđể sao chép các tập tin với một trong hai mô hình *.txt hoặc mô hình *.pngđể destination? Lý tưởng nhất, tôi muốn có thể chỉ định nhiều hơn hai mẫu - ví dụ như hướng dẫn cpsao chép tất cả *.txt hoặc *.png hoặc *.jpg tệp vào destination.

Tôi chắc chắn rằng tất cả những điều này đều có thể khi sử dụng tập lệnh shell - bashví dụ như tôi đang sử dụng - nhưng có cách nào để thực hiện nó đơn giản hơn, chỉ từ bảng điều khiển không? Tôi có thể bằng cách nào đó sử dụng mở rộng cú đúp để làm điều đó?

Tôi biết rằng có thể sao chép tất cả các tệp trong thư mục làm việc ngoại trừ các tệp phù hợp với một số mẫu được chỉ định nhất định , nhưng vì thư mục làm việc của tôi chứa nhiều phần mở rộng tệp mà tôi không muốn sao chép hơn các tệp tôi làm , điều đó sẽ gây khó khăn.

Bạn có bất cứ suy nghĩ về điều này?


10
cp -v *.txt *.png destination/?
iruvar

Câu trả lời:


55

Mở rộng cú đúp sẽ hoàn thành công việc. man bashvà tìm kiếm Brace Expansion.

cp *.{txt,jpg,png} destination/

CHỈNH SỬA:

Để phù hợp với yêu cầu của OP, lệnh trên đã thiếu tùy chọn dài dòng:

cp -v *.{txt,jpg,png} destination/

2
Tôi có thể làm điều này trên Windows không?
sergiol

Nếu tôi làm cp data/images/*.{jpg,jpeg,png,mp4} destination/và một mp4tập tin không tồn tại, tôi sẽ No such file or directorygặp lỗi làm hỏng tập lệnh. Tôi có thể làm cho nhiều tiện ích mở rộng xử lý một cách duyên dáng bất kỳ định dạng bị thiếu nào không?
BradGreen

1
@BradGreen Bạn thực sự nên đăng một câu hỏi mới thay vì hỏi ở đây trong các bình luận. Câu hỏi của bạn thậm chí có thể có một câu trả lời. Đăng một câu hỏi mới sẽ không chỉ giúp bạn có câu trả lời mà sau đó nó sẽ được tìm kiếm bởi những người khác cần sự giúp đỡ tương tự.
Timothy Martin

0
for filename in /Photos/directory/* ; do
    filenameWithoutPath="${filename##*/}"
    first_num="${filenameWithoutPath%%.*}"
    last_num="${filenameWithoutPath##*.}"
    cp $filename /Photos/directory/$first_num-$last_num.jpg
done

Đó là làm việc!

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.