mv: Thư mục không trống


155

Tôi muốn di chuyển nội dung của một thư mục trong một thư mục khác có cùng thư mục.

Đây là một ví dụ:

Tôi có ./backupcác thư mục basetest. Bây giờ tôi muốn di chuyển các thư mục này trong ./backupArchives.

Tôi sử dụng cái này:

mv ./backup/* ./backupArchives

nhưng tôi đã nhận được lỗi

mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty

Tôi đã thử sử dụng --force, nhưng không có may mắn. Có cách nào để di chuyển nó khi các thư mục đã tồn tại?

Lưu ý: Tôi chỉ muốn hợp nhất nội dung, không có ghi đè.


Bạn chỉ đang cố gắng hợp nhất nội dung của các thư mục vào đích hay bạn đang cố ghi đè lên những gì ở đích. (nó cũng hữu ích nếu bạn có lỗi ENTIRE, mà không sử dụng ...... để cắt bớt dữ liệu)
Thomas Ward

Tôi chỉ muốn hợp nhất nội dung, không có ghi đè.
UdK

2
@UdK Thậm chí nếu điều này sẽ làm việc, lưu ý rằng điều này sẽ không hợp nhất các nội dung của hai thư mục. Di chuyển một thư mục sẽ thay thế mục tiêu của nó. Có một cái nhìn rsyncthay vào đó, nó sẽ làm việc sáp nhập.
zwets

Câu trả lời:


188

Mặc dù trang man của nó không ghi lại nó, nhưng mvsẽ từ chối đổi tên một thư mục sang thư mục khác nếu thư mục đích chứa các tệp. Đây là một điều tốt trong trường hợp của bạn bởi vì bạn hóa ra muốn hợp nhất nội dung của nguồn vào mục tiêu, điều mvnày sẽ không làm được.

Sử dụng rsync -a backup/ backupArchives/thay thế. Sau đó rm -rf backup/*.

Thay vì sử dụng rsync, bạn cũng có thể thực hiện cổ điển

(cd backup && tar c .) | (cd backupArchives && tar xf -)

mà kiếm được nhiều điểm geek hơn.


4
những điều tốt đẹp để biết! Cả hai đều làm việc tuyệt vời. Cảm ơn!
UdK

5
Điểm
đam mê

2
cần lưu ý điều này đòi hỏi bạn phải có kích thước của thư mục trong không gian trống. Và sẽ gây ra những vấn đề khủng khiếp nếu không.
Pogrindis

4
@Pogrindis Hãy giải thích những vấn đề khủng khiếp sẽ xảy ra, và chúng khác với bất kỳ nỗ lực nào khác để ghi vào một đĩa đầy đủ? Thật vậy, vì cả hai thao tác đều giữ nguyên thư mục gốc, nếu thao tác thất bại bạn chỉ đơn giản là rm -rf backupArchiveskhông có hậu quả, hãy để một mình 'khủng khiếp'.
zwets

4
Cảm ơn bạn đã đặt tên cho phương pháp cổ điển, rất hữu ích nếu rsync không có sẵn! Cũng hoạt động với sudo bằng cách sử dụngsudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)'
ArendE

39

Nhanh và bẩn, nếu bạn biết bạn đang làm gì:

cp -r ./backup/* ./backupArchives && rm -R ./backup/*

3
Cũng hoạt động trong chế độ an toàn của tôi, genious.
Bned_User

4

Sau khi thư mục bạn di chuyển bạn cần *(đại diện cho bất kỳ văn bản hoặc số). Ví dụ:

mv /var/www/* /recovery/wwwrecovery/

đó là tất cả, nếu bạn di chuyển tệp, hơn là bạn di chuyển như:

mv /var/www/index.php /recovery/index.php

Một cách khác là đóng gói nội dung thư mục đó bằng cách sử dụng tar:

tar -cvzpf backup.tar.gz /var/www 

Sau đó di chuyển nó nằm bất kỳ tập tin khác. Ngoài ra tôi khuyên bạn nên thực hiện bước này vì tar nén nó và làm cho nó có kích thước nhỏ hơn.

Để giải nén các tập tin vào thư mục khác sử dụng

tar -xvzpf /var/www/

Nếu bạn cần sao chép vào một vị trí bạn không sở hữu, hãy đảm bảo bổ sung lệnh của bạn bằng sudolệnh sau bất kỳ tùy chọn nào bạn quyết định sử dụng.

sudo tar -cvzpf backup.tar.gz /var/www/

Tôi đang sử dụng Ubuntu 12.10 và tôi nhận được: mv: tùy chọn không hợp lệ - 'R' Hãy thử `mv --help 'để biết thêm thông tin. Quả thực .tar rất hay, nhưng tôi cần biết cách di chuyển các tập tin của mình cho tình huống này. Cảm ơn sự giúp đỡ của bạn
UdK

i sử dụng máy tính để bàn và máy chủ 12.04 và cả hai đều hoạt động tốt. hãy cẩn thận, nếu bạn không tạo ra không gian betwen folfer và -R. Tôi cũng đã thử mà không có -R hoạt động theo cách tương tự đối với tôi, thử mà không -R, nhưng hãy cẩn thận với chính tả: linux vấn đề chữ thường và chữ hoa !!! hơn là nếu đường dẫn được kết hợp di chuyển hoặc di chuyển từ vị trí. nếu bạn không có thư mục đó mà bạn muốn chuyển sang chỉ đặt -C sau nó và nó sẽ tạo nó. cũng thử trước: tìm tên -iname của thư mục của bạn và chạy lệnh này từ root, chỉ để xem nó có tồn tại ở nơi khác nếu bạn bỏ lỡ một lỗi chính tả nào đó. cho tôi lệnh chính xác mà bạn đã sử dụng
Dimitris Theodoridis

những gì thaaa ..... đặt tên tệp đó trong betwen **
Dimitris Theodoridis

1
Điều đó -Rchắc chắn không nên đến sau cuộc tranh cãi đầu tiên. Các tùy chọn (gần như) luôn đi trước các đối số lệnh. Ngoài ra, mvkhông có -Rtùy chọn, và cuối cùng, đệ quy là không liên quan đến a mv. @DimitrisTheodoridis vui lòng kiểm tra câu trả lời của bạn trước.
zwets

vâng, bạn tôi nói đúng, tôi luôn gặp vấn đề với chính tả của mình và luôn luôn có vấn đề với thiết bị đầu cuối hoặc lệnh không tìm thấy hoặc tạo các tệp và thư mục mới mà tôi không biết, chỉ vì lỗi chính tả ... đã sử dụng lệnh cp, hơn ở đây đã viết mv sory cho người bạn đó: D
Dimitris Theodoridis

4

Chắc chắn là rsynckhông hoạt động, nhưng điều này có thể hoạt động tốt cho máy không hỗ trợ rsync(ví dụ: trong cpanel, rsync không được cài đặt theo mặc định).

Những gì về việc sử dụng:

cd /path/to/backup/ && cp -R --parents ./* ../backupArchives

Sau đó xóa backupthư mục nếu cần thiết

Note1: Bạn cần phải cdđến backupthư mục trước khi thực hiện cáccp -R --parents ...

Lưu ý2: Kiểm tra kỹ backupArchivesthư mục nếu bạn nhận được các tệp mới từ bản sao lưu.


1

Trước khi đặt câu hỏi, hãy xem xét một trường hợp đơn giản.

Giả sử trong / home / admin chúng ta có hai thư mục foobarcó cùng cấu trúc thư mục con, nhưng mỗi thư mục chứa các tệp khác nhau trong đó. Bây giờ chúng tôi muốn hợp nhất chúng thành một. Khi chúng tôi làm những việc như thế mv foo/* bar, lỗi mv: directory not emptyxảy ra.

Giải pháp của tôi là từ bỏ các công cụ dòng lệnh và chuyển sang trình quản lý tệp GUI, ví dụ như cá heo. Khi bạn đổi tên foothành barcá heo, nó cung cấp cho bạn tùy chọn để ghi vào thư mục đích và hỏi bạn có nên ghi đè lên các tệp hiện có, một cách tương tác. Điều này tránh sao chép và xóa, điều này có hiệu quả giúp tiết kiệm thời gian của bạn mà không cần một dòng mã nào.

PS: Tôi đã không kiểm tra mọi trình quản lý tập tin ngoài đó. Nhưng hầu hết trong số họ nên có tính năng này.

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.