Di chuyển nội dung thư mục lên một cấp


127

Tôi có một thư mục được giải nén, nhưng là trong một thư mục. Làm thế nào tôi có thể di chuyển nội dung lên một cấp? Tôi đang truy cập CentOS thông qua SSH.

Câu trả lời:


189

Với thư mục có tên 'myfolder' và tăng một cấp trong phân cấp tệp (điểm bạn muốn đặt), lệnh sẽ là:

mv myfolder/* .

Vì vậy, ví dụ nếu dữ liệu được nhập vào /home/myuser/myfolderthì hãy /home/myuser/chạy lệnh.


35
Bạn cũng có thể cần phải khớp .*không chỉ *nếu kho lưu trữ chứa các tệp chấm. Đồng thời thêm `&& rmdir myfolder` vào cuối o để xóa thư mục không liên quan. Đây là lưu vì nó sẽ chỉ chạy nếu mv trả về thành công VÀ vì rmdir sẽ không xóa thư mục không trống.
Caleb

Điểm tốt trên .*. Xóa thư mục gốc vừa tầm thường vừa không được yêu cầu, vì vậy chúng tôi sẽ để OP giải quyết vấn đề đó.
Rudu

1
@Caleb có thể viết cả hai *.*trong một dòng không? chỉ tò mò
Richard

2
@Richard Vâng, đúng vậy. mvTất cả các đối số sẽ là các nguồn ngoại trừ đối số LAST cần là mục tiêu để di chuyển (và trong trường hợp có nhiều nguồn, cần phải là một thư mục).
Caleb

1
Tôi đang nhận bash:/bin/mv: Argument list too long
dragosrsupercool

26

Chỉ cần làm cho nó rõ ràng, lấy từ câu trả lời của Rudu ở trên, và các ý kiến.

Nếu bạn cần di chuyển tất cả các nội dung, BAO GỒM các tệp bắt đầu bằng a. (như .htaccess, .git, v.v.), bạn cần bao gồm cả * và. * trong lệnh của mình. Thích như vậy:

 mv subfolder/* subfolder/.* .

Điều đó sẽ di chuyển nội dung của thư mục con vào thư mục hiện tại của bạn. Lưu ý khoảng trắng trước dấu "." Cuối cùng.


nó hoạt động nhưng tôi nhận được mv: rename fake/. to ./.: Invalid argumentmv: rename fake/.. to ./..: Invalid argument
Maslow

16

Điều này là có thể với các phương pháp sau:

  • Sử dụng rsync:

    rsync -vua --delete-after foo/ .
  • Sử dụng cprmdir:

    cp -vaR foo/. . && rmdir foo/
  • Sử dụng mv(với dotglobtùy chọn được bật):

    shopt -s dotglob # Includes filenames beginning with a dot.
    mv -- foo/* .    # Where foo/ is the folder consisting the files.
    shopt -u dotglob # Disables previously enabled dotglob option.

    nơi foo/là thư mục của bạn có nội dung được chuyển lên mức trên.

    Xem: help shoptman bash.

  • Sử dụng mv(như đề xuất ở đây ):

    mv foo/* foo/.[^.]* . && rmdir foo/

    Lưu ý: Nó sẽ bỏ lỡ một tập tin gọi là foo/..bar...

    Lưu ý: Đối với đạn POSIX, bạn cần [!.].


Được thiết bị chuyển mạch rsync gì -v, -u, -a-rlàm gì? AFAICT, -vdài dòng, chỉ làm cho rsync in thêm thông tin. -ucó nghĩa là cập nhật - chỉ sao chép một tập tin nếu nó mới hơn. Điều đó dường như không liên quan. -acó nghĩa là lưu trữ. Điều đó sẽ sao chép chủ sở hữu và quyền của tệp và thực hiện đệ quy đồng bộ hóa. -rcó nghĩa là đệ quy, nhưng điều đó đã được bao phủ bởi -a.
rjmunro

-urất hữu ích khi bạn không muốn dành thêm thời gian để di chuyển dữ liệu đã có sẵn (đặc biệt là đối với các thiết bị lưu trữ chậm). Tôi đã xóa -r, vì nó được bao phủ bởi -anhư bạn đã đề cập.
kenorb

1
mv foo/* foo/.[^.]* .sẽ bỏ lỡ một tập tin được gọi là foo/..bar..ví dụ. Lưu ý rằng đối với vỏ POSIX, bạn cần [!.].
Stéphane Chazelas

Cần phải đề cập rằng, rsync -vua --delete-after foo/ .xóa mọi thứ khác có thể đã tồn tại trong thư mục hiện tại.
David

7

chỉ cần ban hành lệnh mv

mv (directory)/* .

nếu bạn muốn xóa thư mục thì thêm

rm -rf (directory)

Giả sử rằng bạn đang ở trong một thư mục mẹ của (thư mục)

Nếu bạn ở trong (thư mục) thì

mv * ../

13
Bổ sung mũi an toàn: Khi xóa một thư mục bạn biết nên để trống, rmdirphàn nàn và lối thoát hiểm nếu thư mục không phải là trống rỗng, trong khi rm -rsẽ thay vào đó chỉ đã xóa nó và tất cả các nội dung của nó. (Đó là một ách poka .)
Anko

Điểm tuyệt vời! Tôi không thể nghĩ ra một lý do để không làm theo cách đó.
Mark Lalor

@MarkLalor Một lý do có thể là sự hiện diện của các tệp ẩn, như phổ biến .DS_storetrong macOS. Các mvlệnh trên sẽ không di chuyển những người (mà không cần dotglobcài đặt).
AkselA

0

Đối với những người bạn trên một máy chủ được chia sẻ, bạn phải sử dụng một cái gì đó như thế này

Để di chuyển các tập tin

mv -v ~/public_html/public_html/* ~/public_html/

Để sao chép các tập tin

cp -a ~/public_html/public_html/* ~/public_html/


2
Câu hỏi trên hỏi về việc di chuyển không sao chép nội dung. Điều này sẽ sao chép các tệp bằng cách để các bản gốc trong thư mục con. Cũng là một máy chủ "chia sẻ" hoặc không thực sự không liên quan gì đến việc này.
Caleb

1
quyền của bạn và đây là câu trả lời cho nó ...
Ricardo Havoc

2
Chỉnh sửa của bạn: làm thế nào là khác nhau mà câu trả lời đã được nâng cấp ? Và một "máy chủ chia sẻ" phải làm gì với nó? Vui lòng chỉnh sửa để giải thích các mục này nếu đây sẽ là một đóng góp hữu ích làm tăng giá trị cho những gì đã có ở đây.
Caleb

1
Tôi không đồng ý về việc máy chủ chia sẻ không liên quan gì đến nó. Cách "dir" được nhập vào tạo nên một thế giới khác biệt ..
Ricardo Havoc

1
anh bạn tại sao lại nổi điên như vậy? ... wow .. Tôi chỉ chia sẻ một chút kiến ​​thức. Tất cả chúng ta đều hiểu khác nhau và đối mặt với các vấn đề kỹ thuật khác nhau một cách khác nhau ... Chúc bạn có một ngày tốt lành Caleb ..
Ricardo Havoc
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.