Làm cách nào để di chuyển các tệp ra khỏi các thư mục con được lồng vào một thư mục khác trong ubfox? (Đang cố gắng loại bỏ nhiều thư mục con)


36

Làm cách nào để di chuyển tệp và không thư mục vào thư mục khác / thư mục cha?

Tôi có một cấu trúc thư mục cực kỳ xấu, với một số tệp .mp3 bị chôn sâu 6 cấp trong một thư mục con.

Tôi muốn kết thúc với tất cả các tệp (chủ yếu là .mp3 nhưng không phải tất cả) trong một thư mục, hoàn toàn không có thư mục con, sử dụng Ubuntu.

Cứu giúp?

Câu trả lời:


48

Có một câu trả lời tuyệt vời trong Askubfox-QA .

Để làm như vậy, Mở một thiết bị đầu cuối và thực hiện lệnh này:

mv  -v ~/Downloads/* ~/Videos/

Nó sẽ di chuyển tất cả các tệp và thư mục từ thư mục Tải xuống sang thư mục Video.


Để di chuyển tất cả các tệp, nhưng không phải thư mục:

Nhưng, nếu bạn muốn di chuyển tất cả các tệp (nhưng không phải thư mục) từ thư mục Tải xuống sang thư mục Video, hãy sử dụng lệnh này

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos

Để chỉ di chuyển các tệp từ các thư mục Tải xuống, nhưng không di chuyển từ các thư mục con:

Nếu bạn muốn di chuyển tất cả các tệp từ thư mục Tải xuống, nhưng không phải bất kỳ tệp nào trong các thư mục trong thư mục Tải xuống, hãy sử dụng lệnh này:

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos

Ở đây, -maxdepthtùy chọn chỉ định mức độ tìm kiếm sâu nên thử, 1có nghĩa là, chỉ thư mục được chỉ định trong lệnh find. Bạn có thể thử sử dụng 2, 3cũng để kiểm tra.

Xem trang tìm kiếm Ubuntu để được giải thích chi tiết.

Nguồn


Nếu điều tôi muốn làm là sao chép tất cả các tập tin vào thư mục thì tôi có phải đổi mv thành cp không? Tôi mới dùng linux
Neoryder

13

Dung dịch

find /src/dir -type f -exec mv --backup=numbered -t /dst/dir {} +

Lệnh sẽ tìm tất cả các tệp thông thường bên dưới /src/dir(bao gồm tất cả các thư mục con) và di chuyển chúng đến /dst/dirbằng cách sử dụng lệnh mv. Chỉ cần thay thế các thư mục của bạn. Các tệp có cùng tên sẽ được đổi tên tự động.

Chọn tập tin để di chuyển

Nếu bạn muốn di chuyển chỉ các tệp MP3, hãy thêm -iname "*.mp3"tùy chọn vào findlệnh sau -type f.

So sánh với trả lời của c0dev

Chỉ có lệnh thứ hai trong câu trả lời của c0dev trả lời câu hỏi. Dưới đây là làm thế nào để so sánh với trả lời này. Các điểm 3. và 4. có thể được giải quyết trong câu trả lời khác giống như ở đây.

  1. Ngoại trừ mvgiải pháp -exec +không cần phải gọi một lệnh bổ sung như xargshoặc parallelbàn giao tên tệp hai lần.
  2. Câu trả lời khác sẽ âm thầm ghi đè lên các tệp có cùng tên. Tại đây các tập tin sẽ được tự động đổi tên nhờ vào tùy chọn --backup=numbered. Thật không may, các bản sao lưu có hậu tố như ~3~sẽ bị ẩn trong hầu hết các tệp được quản lý theo mặc định. Thật không may mv, không cho phép thay đổi hậu tố nhưng nó có thể dễ dàng xử lý hậu kỳ bằng các lệnh bổ sung. Đây là một phần mở rộng GNU.
  3. Trái ngược với -print0 -exec command {} +một phần của tiêu chuẩn IEEE Std 1003.1 (POSIX), ISO / IEC 9945 và Các tiêu chuẩn kỹ thuật UNIX đơn. Vì vậy, nó sẽ được di động hơn. Xem IEEE Std 1003.1, Phiên bản 2004 , IEEE Std 1003.1, Phiên bản 20130000243: Thêm -print0 để "tìm" . Nhưng dù sao thì công -ttắc được yêu cầu mvlà một phần mở rộng GNU nên toàn bộ lệnh không thể di chuyển giữa các hệ thống POSIX.

Lưu ý: Trong trường hợp findsẽ có thể tạo các đường dẫn bắt đầu bằng -(tôi không biết về bất kỳ triển khai nào như vậy findvào lúc này.) {}Nên được đi trước bởi chỉ báo kết thúc tùy chọn : --.


Lỗi: find: thiếu đối số cho `-exec '
Chris

@Chris: Bạn nói đúng, dường như đó {}phải là đối số cuối cùng. Đã sửa.
pabouk

@Chris: Bây giờ nó có hoạt động như bạn muốn không? Nếu có, bạn có thể chấp nhận câu trả lời để câu hỏi của bạn không hiển thị là "không được giải quyết".
pabouk

Đây là những gì tôi đang chạy và nhận được các lỗi không tìm thấy trong thư mục:
Chris

những gì tôi đang chạy: clstal @ clap: ~ $ ls Tập lệnh thứ nhất.R Firefox_wallapers.png part1vidproj zotero pdf manager Desktop mozilla.pdf / Destination / thư mục {} + find: `/ source / thư mục ': Không có tệp hoặc thư mục như vậy
Chris

2

Thật không may, tôi không có một danh tiếng đủ cao để nhận xét về giải pháp được đánh dấu. Tuy nhiên, tôi muốn cảnh báo người khác về một vấn đề tôi gặp phải. Nó khá nghiệp dư; tuy nhiên, khi bạn đang làm một số việc, nó có thể không xuất hiện trong đầu. Hy vọng, nó sẽ giúp đỡ người khác.

Vấn đề

Biến thể của thông báo sau được cung cấp sau khi bắt đầu lệnh. Lệnh sau đó tạo nhiều tệp.

mv: `/data/share/docs/src/dir/filename.ext' and `/data/share/docs/src/dst/filename.ext' are the same file

Nguyên nhân

Đây /srclà cha mẹ của /dst(ví dụ /src/../dst/).

Dung dịch

Mặc dù có thể có một giải pháp tốt hơn, tôi chỉ cần di chuyển các tệp vào một thư mục tạm thời bên ngoài /srcvà sau đó chạy lại lệnh để đặt chúng trở lại trong /src/../dstthư mục mà tôi muốn chúng kết thúc.


2

My one-liner - cái này hoạt động trên máy Mac nhưng cũng nên làm trên bất kỳ * nix nào. Bắt đầu từ thư mục cha.

# Move files to parent and delete empty folders
find . -not -type d -print0 | xargs -0J % mv -f % . ; find . -type d -depth -print0 | xargs -0 rm -rf

Phần đầu tiên di chuyển mọi thứ từ tất cả các thư mục con vào thư mục thực tế từ nơi bạn khởi động lệnh; phần thứ hai kiểm tra xem các thư mục con có trống không (bây giờ chúng sẽ :-) và xóa chúng để bạn có được mọi thứ ở đây mà không có thư mục con.


(1) Hãy giải thích những gì câu trả lời của bạn làm, và bất kỳ lợi thế nào nó có so với các câu trả lời khác (rất giống nhau). Xin vui lòng không trả lời trong các ý kiến; chỉnh sửa  câu trả lời của bạn để làm cho nó rõ ràng và đầy đủ hơn. (2) Lưu ý rằng -nottoán tử không chuẩn, do đó lệnh của bạn ít di động hơn các toán tử khác.
Scott

tìm thấy . -không -type d -print0 | xargs -0J% mv -f%. ; tìm thấy . -type d -depth -print0 | xargs -0 rm -rf Tôi đã chạy lệnh này trong một thư mục và nó đã xóa các thư mục con, thư mục tôi đang ở, và sau đó chuyển lên thư mục mẹ. May mắn thay, tôi đã xem trình quản lý tập tin của mình và quản lý để dừng lệnh và nó đã được chạy trong một thư mục thử nghiệm.
Will

1

Mở terminal, cd vào thư mục thư mục của bạn với các tệp và chạy find . -mindepth 2 -type f -print -exec mv {} . \; để di chuyển tất cả các tệp từ các thư mục con này sang thư mục hiện tại.

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.