lệnh cp để loại trừ các tập tin nhất định khỏi bị sao chép


35

Có cách nào để sử dụng lệnh 'cp' để sao chép một thư mục và loại trừ các tệp / thư mục con nhất định trong đó không?

Câu trả lời:


57

Sử dụng rsync:

rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination

Lưu ý rằng sử dụng sourcesource/là khác nhau. Dấu gạch chéo có nghĩa là sao chép nội dung của thư mục sourcevào destination. Không có dấu gạch chéo, có nghĩa là sao chép nguồn thư mục vào destination.

Ngoài ra, nếu bạn có nhiều thư mục (hoặc tệp) để loại trừ, bạn có thể sử dụng --exclude-from=FILE, đâu FILElà tên của tệp chứa tệp hoặc thư mục để loại trừ.

--exclude cũng có thể chứa các ký tự đại diện, chẳng hạn như --exclude=*/.svn*

Sao chép từ: https://stackoverflow.com/a/2194500/749232

Nếu bạn muốn sử dụng cpchính nó:

find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'

Điều này giả định cấu trúc thư mục đích giống như của nguồn.

Sao chép từ: https://stackoverflow.com/a/4586025/749232


3

Vào cuối trò chơi nhưng đây là một giải pháp rất khác bằng cách sử dụng bash và cp đơn giản: bạn có thể sử dụng một đặc tả tệp toàn cầu trong khi có một số tệp bị bỏ qua.

Giả sử thư mục chứa các tệp:

$ ls *
listed1  listed2  listed3  listed4  unlisted1  unlisted2  unlisted3

Sử dụng biến GLOBIGNORE :

$ export GLOBIGNORE='unlisted*'
$ ls *
listed1  listed2  listed3  listed4

Hoặc với các loại trừ cụ thể hơn:

$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1  listed2  listed3  listed4  unlisted3

Hoặc sử dụng kết hợp phủ định :

$ ls !(unlisted*)
listed1  listed2  listed3  listed4

Điều này cũng hỗ trợ một số mẫu chưa từng có:

$ ls !(unlisted1|unlisted2)
listed1  listed2  listed3  listed4  unlisted3

1
Đối với các kết quả khớp tiêu cực, bạn cần phải bật tính năng mở rộng:, shopt -s extglobbạn cũng không cần xuất GLOBIGNORE: phải sửa đổi hành vi của trình bao hiện tại, hầu hết các chương trình con sẽ không quan tâm đến nó.
muru
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.