Câu trả lời:
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/myfolder
thì hãy /home/myuser/
chạy lệnh.
.*
. 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 đề đó.
*
và .*
trong một dòng không? chỉ tò mò
mv
Tấ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).
/bin/mv: Argument list too long
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.
mv: rename fake/. to ./.: Invalid argument
vàmv: rename fake/.. to ./..: Invalid argument
Đ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 cp
và rmdir
:
cp -vaR foo/. . && rmdir foo/
Sử dụng mv
(với dotglob
tù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 shopt
và man 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 [!.]
.
-v
, -u
, -a
và -r
làm gì? AFAICT, -v
dài dòng, chỉ làm cho rsync in thêm thông tin. -u
có 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. -a
có 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. -r
có nghĩa là đệ quy, nhưng điều đó đã được bao phủ bởi -a
.
-u
rấ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 -a
như bạn đã đề cập.
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 [!.]
.
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.
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 * ../
.DS_store
trong macOS. Các mv
lệnh trên sẽ không di chuyển những người (mà không cần dotglob
cài đặt).
Đố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/
.*
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.