Sao chép tập tin từ thư mục này sang thư mục khác


11

Tôi có tất cả âm nhạc của tôi trong một thư mục /media/kalenpw/MyBook/Music/ABunchOfOtherFoldersWithFilesInside. Tôi muốn sao chép tất cả các mp3 để /media/kalenpw/HDD/Musictôi sử dụng:

cp -R /media/kalenpw/MyBook/Music/*.mp3 /media/kalenpw/HDD/Music

tuy nhiên, điều này chỉ sao chép các mp3 trong thư mục nhạc gốc và không mở bất kỳ thư mục con nghệ sĩ nào và sao chép các tệp đó.

Tôi đã có ấn tượng -Rsẽ sao chép đệ quy tất cả các tập tin. Làm thế nào tôi có thể đạt được mục tiêu nói?

Câu trả lời:


19

Sử dụng:

find /media/kalenpw/MyBook/Music/ -name '*.mp3' -exec cp {} /media/kalenpw/HDD/Music \;

Lý do lệnh của bạn không làm việc là tên chứa ký tự đại diện ( *.mp3) được mở rộng trước khi lệnh được chạy, vì vậy nếu bạn có ba file ( 01.mp3, 02.mp3, 03.mp3) lệnh hiệu quả của bạn là:

cp -R /media/kalenpw/MyBook/Music/01.mp3 /media/kalenpw/MyBook/Music/02.mp3 /media/kalenpw/MyBook/Music/03.mp3 /media/kalenpw/HDD/Music

Như bạn có thể thấy -Rkhông có tác dụng trong trường hợp này.


Tôi đề nghị -inamethay vì -nametrong trường hợp bất kỳ tập tin kết thúc .MP3.
Oledit

Cảm ơn bạn đã làm việc này. Hoặc ít nhất là trong quá trình làm việc.
kalenpw

5

Bạn đã đề cập cụ thể (các) tệp / thư mục sẽ được sao chép như sử dụng *.mp3tức là bất kỳ tên tệp / thư mục nào kết thúc bằng .mp3.

Vì vậy, bất kỳ tập tin kết thúc bằng .mp3trong /media/kalenpw/MyBook/Music/thư mục và tương tự, bất kỳ thư mục kết thúc vào .mp3trong /media/kalenpw/MyBook/Music/sẽ được sao chép, đệ quy. Nếu không có tệp / thư mục phù hợp như vậy, sẽ không có gì được sao chép.

Bây giờ để sao chép tất cả .mp3các tệp từ /media/kalenpw/MyBook/Music/recursivley vào thư mục /media/kalenpw/HDD/Music/:

  • Sử dụng bash:

    shopt -s globstar
    cp -at /media/kalenpw/HDD/Music /media/kalenpw/MyBook/Music/**/*.mp3
    
  • Sử dụng find:

    find /media/kalenpw/MyBook/Music -type f -name '*.mp3' -exec cp -at /media/kalenpw/HDD/Music {} +
    

Cảm ơn, techraf đã trả lời trước nên tôi đã chấp nhận câu trả lời của họ.
kalenpw

1

Bạn cũng có thể sử dụng cpr :

$ cd /media/kalenpw/HDD/Music
$ cpr -p '/\.mp3$/' '/media/kalenpw/MyBook/Music/'

Lưu ý rằng không có -p cpr sẽ bảo toàn đường dẫn thư mục đầy đủ trên tên tệp được sao chép.
-rcó thể được sử dụng (thay vì -p) để bảo vệ đường dẫn trong '/media.../Music/'.
Cũng cprsẽ lưu ý rằng không có tệp nào bị ghi đè, nối thêm một số bắt đầu từ '0001' vào bất kỳ tên tệp lặp lại nào được sao chép.


0

Giả sử rằng bạn có một loạt các .docx, .mp3, .txt.xlsxcác file lưu trữ trong cấu trúc thư mục này:

/files/
/files/dir1/
/files/dir1/dir11/
/files/dir1/dir12/
/files/dir1/dir13/
/files/dir2/
/files/dir3/
/files/dir3/dir31/
/files/dir3/dir32/
/files/dir4/
/files/dir5/
/files/dir51/
/files/dir52/
/files/dir53/
/files/dir54/

... và bạn muốn truy xuất lại tất cả các thư mục đó để sao chép tất cả .mp3các tệp tìm thấy vào /home/me/music/nhưng bạn không muốn bảo tồn cây thư mục đó ở đích (tức là bạn muốn tất cả .mp3các tệp tìm thấy được sao chép vào /home/me/music/thay vì sao chép vào các thư mục tương ứng chẳng hạn như /home/me/music/dir1/, /home/me/music/dir1/dir11/et cetera).

Trong trường hợp như vậy, tại terminal terminal (bash) trước tiên hãy chạy lệnh này để truy cập vào thư mục gốc của tìm kiếm tệp của bạn:

cd /files

... và sau đó chạy lệnh này:

for i in `find . -iname '*.mp3'`; do cp $i /home/me/music/; done

Trong trường hợp bạn làm muốn giữ cây thư mục của nguồn trong đích, chạy lệnh này để thay thế (sau khi chạy cd /files):

find . -iname '*.mp3' | cpio -pdm /home/me/music/

Trên lệnh trên, việc tìm kiếm là case-insensitive (tức là các trận đấu .mp3, .MP3, .mP3.Mp3). Sử dụng -namethay vì -inamenếu bạn muốn tìm kiếm phân biệt chữ hoa chữ thường (ví dụ: sử dụng -namecho .mp3chuỗi ký tự sẽ khớp với các tệp kết thúc .mp3nhưng không phải là kết thúc bằng .MP3, .mP3cũng không .Mp3).

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.