Làm cách nào tôi có thể di chuyển tệp theo kiểu đệ quy từ một thư mục và thư mục con của nó sang thư mục khác?


30

Điều gì sẽ là một cách tốt để di chuyển một loại tệp từ một thư mục và tất cả các thư mục con của nó?

Giống như "di chuyển tất cả * .ogg trong / thisdir đệ quy thành / somedir". Tôi đã thử một vài điều; nỗ lực tốt nhất của tôi là (vẫn không tuyệt lắm):

find /thisdir -type f -name '*.ogg' -exec mv /somedir {} \;

Nó trả về trên mỗi dòng trước mỗi tên tệp,

mv: cannot overwrite non-directory `/thisdir/*.ogg' with directory `/somedir'

Câu trả lời:


23

bạn có thể sử dụng find với xargs cho việc này

find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -Imysongs mv -i mysongs /somedir

-I trong lệnh trên cho xargs biết chuỗi thay thế nào bạn muốn sử dụng (nếu không, nó sẽ thêm các đối số vào cuối lệnh).

HOẶC
Trong lệnh của bạn, chỉ cần cố gắng di chuyển '{}' sau mvlệnh.

find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;


1
xin đừng quên sao lưu trước khi thử các lệnh trên :-).
Hemant

2
Btw, cho -print0 đầu tiên cho find và -0 cho xargs nên được sử dụng càng tốt, để tránh khoảng trắng trong các vấn đề về tên tệp.
maxschlepzig

@maxschlepzig: điểm tốt. Tôi sẽ chỉnh sửa.
Hemant

2
Tôi thực sự khuyên mv -ibạn nên sử dụng ở đây, vì vậy bạn không có nguy cơ ghi đè các tệp nếu có điều gì đó bất ngờ xảy ra.
Gilles 'SO- ngừng trở nên xấu xa'

2
với mv từ các tiện ích lõi gnu bạn có thể sử dụng mv -t <targetdir>và + thay vì \;

10
find /thisdir -type f -name "*.ogg" -exec mv {} /somedir \;

Bạn đã thay thế các đối số cho mv


9

Trong zsh hoặc bash 4, để tập hợp tất cả *.oggcác tệp vào /somedir:

mv /thisdir/**/*.ogg /somedir

Nếu bạn muốn sao chép phân cấp thư mục: (cảnh báo, nhập trực tiếp vào trình duyệt)

rsync -a --prune-empty-dirs --include='*/' --include='*.ogg' --exclude='*' /thisdir /somedir

vượt quá tiện lợi trong bash
Đánh dấu
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.