Làm cách nào để di chuyển tất cả các tệp từ thư mục này sang thư mục khác bằng dòng lệnh?


245

Tôi muốn biết làm thế nào tôi có thể di chuyển tất cả các tệp từ một thư mục sang một thư mục khác bằng một dòng lệnh.

Giả sử tôi đang ở trong thư mục Tải xuống của mình và có 100 tệp mà tôi muốn chuyển sang thư mục Video của mình mà không phải ghi tất cả tên tệp.


Bạn đang hỏi về việc di chuyển filesnhưng mọi người chỉ cho bạn cách di chuyển không chỉ filesmà còn folders. Ổn chứ?
Askar

2
@ Hontvári Levente đã đưa ra một câu trả lời một năm trước mà dường như là tốt nhất, sạch sẽ, đơn giản, và nó hoạt động. Vậy làm thế nào mà nó chỉ nhận được 3 phiếu (so với 262 cho câu trả lời hiện đang đứng đầu)?
Ray Butterworth

Câu trả lời:


331

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:

Nếu bạn quan tâm đến việc 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


3
bạn có thể sử dụng mv một mình để di chuyển toàn bộ thư mục sang thư mục khác: thư mục mv ~ / Documents
JohnMerlino

20
FYI Tôi tin rằng lệnh đầu tiên của bạn ("mv -v ~ / Tải xuống / * ~ / Video /") sẽ không di chuyển các tập tin dấu chấm.
Đánh dấu Doliner

1
Có, nó sẽ không di chuyển .files
Anwar

3
Nb. bạn -print0 | xargs -0 mv -t ~/Videoscó thể được thực hiện hiệu quả hơn với -exec mv -t ~/Videos \{\} \+:-)
artfulrobot

3
mv -v ~/Downloads/* ~/Videos/không hoạt động đối với các tệp ẩn
FreeLightman 18/03/18

28
mv ~/Downloads/* ~/Videos

Nó sẽ di chuyển tất cả các tệp bao gồm các thư mục con trong thư mục bạn muốn mv. Nếu bạn muốn cp(sao chép) hoặc rm(loại bỏ), bạn sẽ cần -rtùy chọn (đệ quy) để bao gồm các thư mục con.


2
Lệnh mv của tôi không có tùy chọn -R (Ubuntu 14.04).
Đánh dấu Doliner

1
@MarkDoliner, vâng, mvkhông cần tùy chọn đệ quy để bao gồm các thư mục con. Người ta có thể sử dụng nó để đổi tên.
Alen

Tôi không cần *. Điều tương tự đã xảy ra mà không sử dụng ngôi sao.
MycrofD

~ / Trong tiền tố của tên thư mục không phải lúc nào cũng hoạt động (không hoạt động trên bash và git atleast)
Krish Munot

Giải pháp này sẽ báo lỗi nếu thư mục nguồn trống.
Pierre Thibault

11

Đối với trường hợp đơn giản:

mv ~/Downloads/* ~/Videos

Nếu bạn cũng muốn di chuyển các tập tin dấu chấm (ẩn), sau đó đặt tùy chọn vỏ dotglob .

shopt -s dotglob
mv ~/Downloads/* ~/Videos

Điều này để lại tùy chọn vỏ thiết lập.

Để sử dụng dotglob một lần, hãy chạy các lệnh trong một khung con:

(shopt -s dotglob; mv ~/Downloads/* ~/Videos)

Một lưu ý cho bản thân: Tùy chọn cuối cùng (shopt -s dotglob; mv ~/Downloads/* ~/Videos) chỉ di chuyển (cắt) nội dung (bao gồm các tệp ẩn). Trong trường hợp này, cả thư mục gốc và thư mục đích đều phải tồn tại. Cuối cùng, thư mục gốc trở nên trống rỗng.
Pathros

Đây phải là câu trả lời được chấp nhận
megar

11

Có thể bằng cách sử dụng rsync, ví dụ:

rsync -vau --remove-source-files src/ dst/

Ở đâu:

-v, --verbose: Tăng tính dài dòng.

-a, --archive: Chế độ lưu trữ; tương đương -rlptgoD(không -H, -A, -X).

-u, --update: Bỏ qua các tệp mới hơn trên máy thu.

--remove-source-files Điều này nói rsyncđể loại bỏ khỏi phía gửi các tệp (có nghĩa là không phải thư mục) là một phần của chuyển khoản và đã được sao chép thành công ở phía nhận.

Nếu bạn có quyền root, tiền tố sudođể ghi đè các vấn đề cấp phép tiềm năng.


1
CẢNH BÁO! tùy chọn --delete-after như đã lưu ý không hoạt động theo cách bạn mong đợi. Nó không xóa các tập tin nguồn sau khi sao chép thành công (như @kenorb đã lưu ý ... nhưng tôi đã không đọc kỹ! DOH)
Jay Marm

4

Sử dụng

mv -v ~/rootfolder/branch/* ~/rootfolder

Tôi hi vọng cái này giúp được. Bởi vì tôi có cùng nỗi đau và lãng phí rất nhiều thời gian để sửa chữa lỗi lầm của mình.


2

Để di chuyển một thư mục có hoặc không có nội dung sang tên mới giống như cách bạn sẽ sử dụng mvlệnh để đổi tên tệp:

mv -T dir1 dir2

Ở đâu:

  • -T coi đích là một tập tin bình thường
  • dir1 là tên gốc của thư mục
  • dir2 là tên mới của thư mục

NB: dir2không phải tồn tại.

Tôi hy vọng điều này sẽ tiết kiệm cho ai đó rất nhiều thời gian, với tư cách là một người mới, trước đó, tôi sẽ tạo một thư mục có tên mới và sau đó chuyển nội dung của thư mục sang thư mục đã tạo trước đó.

Sử dụng cho các thư mục con

Lệnh này hữu ích khi nhiều tệp đã được lưu trong thư mục con của thư mục đích tức là Downloads/mp4. Trong ví dụ này, việc chạy mv -T Downloads/mp4 Videossẽ dẫn đến mp4thư mục con bị xóa và tất cả các tệp chứa bên trong được chuyển sang thư mục Video.


1
+1 vì đã thử nghiệm làm việc trong Xubfox 14.04. Tôi đã thêm một ví dụ trong câu trả lời này để cho thấy rằng lệnh này sẽ khiến cho lệnh này dir1bị xóa. Bên cạnh sự đề phòng này, câu trả lời này đã ghi nhận điều gì đó tốt cho việc sử dụng hàng ngày.
Clearkimura

1
"Để di chuyển một thư mục có hoặc không có nội dung sang tên mới" Làm thế nào bạn có thể di chuyển một thư mục ... sang một tên? Điều đó không có ý nghĩa. "-T coi đích là một tệp bình thường" Làm thế nào đích có thể là một tệp? Bạn có nghĩa là thư mục?
Monica Heddneck

Nó giống như đổi tên một tệp thành tên mới như bạn sẽ làm với một cái gì đó giống như mv fileA fileBnhưng -Tcờ trong trường hợp này coi thư mục đích / là một tệp và đổi tên nó.
Feyisayo Sonubi

Làm việc cho tôi :)
Naveen Kumar V

1
  1. Đi đến dòng lệnh và vào thư mục bạn muốn di chuyển đến cd folderNamehere
  2. Loại pwd. Điều này sẽ in thư mục bạn muốn di chuyển nó quá.
  3. Sau đó thay đổi thư mục chứa tất cả các tệp với cd folderNamehere
  4. Bây giờ để di chuyển tất cả các loại tập tin mv *.* typeAnswerFromStep2here

Điều đó sẽ di chuyển tất cả các tập tin từ thư mục đó sang thư mục khác.


3
Điều này sẽ không phù hợp với các tập tin mà không có bất kỳ phần mở rộng. ví dụ nếu một thư mục có các file: foo.txt, bar.barcả hai bar.barsẽ không được di chuyển. Sử dụng *thay vì *.*chăm sóc điều đó. Nhưng trong cả hai trường hợp, các tệp ẩn như: .foobarsẽ không được di chuyển.
Dan

1
mv source_path/* destination_path/

Ở đây bạn phải đưa ra dấu gạch chéo và *sau đường dẫn nguồn để nó sẽ lấy các tệp bên trong source_path thay vì thư mục nguồn hoàn chỉnh.

Thí dụ: mv /home/username/test/* /home/username/test2/

Lệnh trên di chuyển tất cả các tệp (trừ khi chúng bị ẩn) trong thư mục nguồn đến thư mục đích.


0

thử nó

find ~/Desktop -type f -iname  "*.mp4" -exec mv {} ~/Videos \;

-type với đối số -type bạn có thể chỉ định loại tệp. Trên câu lệnh này là tệp trung bình. Nếu sử dụng -d có nghĩa là thư mục.

-iname: phương pháp phổ biến và rõ ràng nhất để tìm tệp đang sử dụng đối số -name của nó. Nếu bạn không chắc về phân biệt chữ hoa chữ thường, bạn có thể sử dụng đối số -iname

mv {} và cuối cùng để chỉ định thư mục đích và sau đó di chuyển các tệp trên đó bằng đối số mv {}

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.