Điểm:0

Sao chép tất cả từ một thư mục vào thư mục gốc của dự án

lá cờ in

Tôi có một dự án web với cấu trúc sau:

đăng kí/
bãi/
nginx/
nhật ký/
.git/
docker-compose.yml
dockerfile
README.md
.gitignore

Vì một số lý do, tôi muốn giải thể thư mục ứng dụng và sao chép tất cả các tệp vào thư mục gốc. Tôi muốn làm điều này như bình thường thông qua CLI. Tuy nhiên, tôi không đi đến đâu vào lúc này.

Tôi đã thử như sau. Tôi đang ở thư mục gốc của dự án.

ứng dụng cp -r/ ./
// xuất cp: 'application/' và './application' là cùng một tệp

cp -r app/*.* ./
// chỉ sao chép các tệp gốc từ ứng dụng vào thư mục gốc của dự án chứ không phải các thư mục.

Đó là loại hợp lý. Làm cách nào để tạo lệnh sao cho nó chỉ sao chép các tệp vào thư mục gốc? Chắc chỉ là chuyện nhỏ thôi nhưng còn quá sớm với tôi.

Maik Lowrey avatar
lá cờ in
@NateT Tôi sẽ xóa applcaition nhưng tôi sẽ sao chép trước khi xóa tất cả nội dung vào thư mục gốc. Đúng.
terdon avatar
lá cờ cn
Hãy nhớ rằng hầu hết các tệp không có phần mở rộng trên hệ thống Linux nên `*.*` hầu như không bao giờ là thứ bạn muốn vì nó sẽ chỉ khớp với các tệp hoặc thư mục có `.` trong tên của chúng. Để khớp với mọi thứ, bạn chỉ muốn `*`.
Điểm:0
lá cờ in

Vâng. Tôi hiểu rồi. Nó thực sự còn sớm ;-) Lệnh đúng sẽ là:

cp -a ứng dụng/. ./

Và tốt hơn là sử dụng tùy chọn -a thay vì tùy chọn -r. Đó là một tùy chọn và phương tiện đệ quy được cải tiến, bảo toàn tất cả các thuộc tính tệp và cũng bảo toàn các liên kết tượng trưng. Đã tìm thấy nó: Làm cách nào tôi có thể sao chép nội dung của một thư mục sang một thư mục khác trong một thư mục khác bằng thiết bị đầu cuối?

Các . ở cuối đường dẫn nguồn là một cú pháp cp cụ thể cho phép sao chép tất cả các tệp và thư mục, bao gồm cả những tệp và thư mục ẩn.

bac0n avatar
lá cờ cn
nghĩ rằng bạn định làm `cp -T app/ .` (có lẽ là khôn ngoan khi thêm `-i`)
Maik Lowrey avatar
lá cờ in
@bac0n Cảm ơn bạn đã bình luận. Tại sao bạn khuyên nên thêm tùy chọn `i`? và những gì có nghĩa là -T? tôi đã sao chép nó như trong câu trả lời của mình và nó đã hoạt động tốt "cho đến nay". bây giờ tôi có nên lo lắng không?
Maik Lowrey avatar
lá cờ in
@bac0n ý tôi là tương tác. vâng, nó sẽ tốt. cảm ơn. nhưng tôi không tìm thấy lời giải thích cho tùy chọn -T.
bac0n avatar
lá cờ cn
Mục tiêu không cần phải tồn tại trước khi sao chép có lẽ là sự khác biệt chính, tiếp theo nếu *source* là một tệp và nhắm mục tiêu một thư mục bạn gặp lỗi thay vì tệp được sao chép vào thư mục (nên là cp -aT hoặc -rT cho đệ quy).
Nate T avatar
lá cờ it
@Maik Đó là Bash, có 10 cách riêng biệt để làm bất cứ điều gì. Tôi chỉ đang làm việc trên một kịch bản vâng. sử dụng cả `cp -a` và chuyển hướng từ find trong khoảng 10-15 dòng của nhau. Tôi khuyên bạn nên xem xét kỹ hơn tất cả các phiên bản và tìm hiểu những điều kỳ quặc cũng như lưu ý của từng phiên bản. Ví dụ: một tập hợp các lệnh có thể hoàn toàn giống nhau với w/params, nhưng chỉ một lệnh được đọc từ stdin mà không có. Điều này có thể không quan trọng trong 90% thời gian, nhưng vào lần thứ 10 đó, bạn nên biết sự khác biệt.Hình dung tôi sẽ chỉ ra điều đó vì đó là mục tiêu ban đầu của tôi nhưng tôi nghĩ rằng tôi đã bỏ lỡ mục tiêu trước đó.
terdon avatar
lá cờ cn
Lưu ý rằng điều này cũng sẽ sao chép các thư mục con, trong khi câu hỏi của bạn chỉ hỏi về các tệp. Không chắc chắn nếu điều này được dự định hay không.
Maik Lowrey avatar
lá cờ in
các tệp và thư mục @terdon. tôi sẽ cập nhật tiêu đề từ câu hỏi của tôi.
Điểm:-1
lá cờ it

Bạn chỉ cần một ký tự đại diện ở cuối lệnh như sau:

ứng dụng cp -r/* ./
Maik Lowrey avatar
lá cờ in
Cảm ơn bạn đã trả lời. Nhưng nó không hoạt động. `cp: toán hạng tệp đích bị thiếu sau 'sub/*'`
Maik Lowrey avatar
lá cờ in
Vâng, điều đó cũng sẽ hiệu quả. Nhưng tôi đã sử dụng `cp -a app/. ./` trước và nó hoạt động hoàn hảo. Tôi cảm thấy bất an trước bình luận của bac0n. Bạn có tình cờ biết tùy chọn `-T` nghĩa là gì không?
Nate T avatar
lá cờ it
Vui mừng bạn đã nhận nó. @MaikLowrey
Maik Lowrey avatar
lá cờ in
Cảm ơn bạn đã dành thời gian và nỗ lực của bạn!
terdon avatar
lá cờ cn
@MaikLowrey câu trả lời ban đầu có các trích dẫn xung quanh `"ứng dụng/*"` khiến toàn cầu (ký tự đại diện) không được mở rộng. Tôi đã sửa nó, nhưng lệnh thứ hai hoàn toàn sai, tôi sợ. Tôi _ nghĩ_ ý của Nate là đại loại như `find ./application/ -type f -exec cp {} ./ +`.Thay vào đó, lệnh trong câu trả lời này sẽ tìm kiếm _directories_ trong thư mục `/application/` và sau đó sẽ nối danh sách tên thư mục vào một tệp có tên `/`. Tệp này sẽ không thành công vì `/` là một thư mục.
Maik Lowrey avatar
lá cờ in
Cảm ơn @terdon! Bạn đúng rồi. Tôi đã lấy `cp -a app/. ./` Tốt nhất là sử dụng lệnh với tùy chọn -i (cảm ơn bac0n) để tránh ghi đè lên các tệp có cùng tên. Trong trường hợp của tôi, "chỉ" .gitigniore bị ghi đè. Các lệnh có đệ quy nên được sử dụng cẩn thận.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.