Score:0

คัดลอกทั้งหมดจากโฟลเดอร์ไปยังไดเร็กทอรีรูทของโปรเจ็กต์

ธง in

ฉันมีโครงการเว็บที่มีโครงสร้างดังต่อไปนี้:

แอปพลิเคชัน/
ทิ้ง/
nginx/
บันทึก/
.git/
นักเทียบท่า-compose.yml
ไฟล์นักเทียบท่า
README.md
.gitignore

ด้วยเหตุผลหลายประการ ฉันต้องการยกเลิกโฟลเดอร์แอปพลิเคชันและคัดลอกไฟล์ทั้งหมดไปยังไดเร็กทอรีราก ฉันต้องการทำสิ่งนี้ตามปกติผ่าน CLI อย่างไรก็ตาม ฉันไม่ได้ไปไหนในตอนนี้

ฉันได้ลองต่อไปนี้ ฉันอยู่ในรากของโครงการ

แอปพลิเคชัน cp -r/ ./
// output cp: 'application/' และ './application' เป็นไฟล์เดียวกัน

cp -r แอป/*.* ./
// คัดลอกเฉพาะไฟล์รูทจากแอปพลิเคชันไปยังรูทของโปรเจ็กต์ ไม่ใช่โฟลเดอร์

ซึ่งเป็นตรรกะ ฉันจะกำหนดคำสั่งเพื่อให้คัดลอกไฟล์ไปที่รูทได้อย่างไร อาจเป็นเพียงสิ่งเล็กน้อยแต่ยังเร็วเกินไปสำหรับฉัน

Maik Lowrey avatar
in flag
@NateT ฉันจะลบ applcaition แต่ฉันจะคัดลอกก่อนที่จะลบเนื้อหาทั้งหมดไปที่รูท ใช่.
terdon avatar
cn flag
โปรดจำไว้ว่าไฟล์ส่วนใหญ่ไม่มีนามสกุลบนระบบ Linux ดังนั้น `*.*` จึงแทบไม่เคยเป็นสิ่งที่คุณต้องการเลย เนื่องจากมันจะจับคู่เฉพาะไฟล์หรือไดเร็กทอรีที่มี `.` อยู่ในชื่อเท่านั้น หากต้องการจับคู่ทุกอย่าง คุณเพียงแค่ต้องการ `*`
Score:0
ธง in

ตกลง. ฉันเข้าใจแล้ว. มันเร็วมาก ;-) คำสั่งที่ถูกต้องคือ:

cp -a แอป/. ./

และควรใช้ -a option แทน -r option เป็นตัวเลือกและวิธีการเรียกซ้ำที่ได้รับการปรับปรุง ซึ่งรักษาแอตทริบิวต์ของไฟล์ทั้งหมด และยังรักษาลิงก์สัญลักษณ์ พบมัน: ฉันจะคัดลอกเนื้อหาของโฟลเดอร์ไปยังโฟลเดอร์อื่นในไดเร็กทอรีอื่นโดยใช้เทอร์มินัลได้อย่างไร

. ที่ส่วนท้ายของเส้นทางต้นทางคือไวยากรณ์ cp เฉพาะที่อนุญาตให้ คัดลอกไฟล์และโฟลเดอร์ทั้งหมด รวมถึงไฟล์ที่ซ่อนอยู่

bac0n avatar
cn flag
คิดว่าคุณตั้งใจจะทำ `cp -T app/ .` (น่าจะฉลาดที่จะต่อท้าย `-i`)
Maik Lowrey avatar
in flag
@bac0n ขอบคุณสำหรับความคิดเห็น ทำไมคุณถึงแนะนำให้เพิ่มตัวเลือก `i` และ -T หมายถึงอะไร ฉันได้คัดลอกไว้ในคำตอบของฉันและใช้งานได้ดี "จนถึงตอนนี้" ฉันควรจะกังวลตอนนี้?
Maik Lowrey avatar
in flag
@bac0n ฉันหมายถึงการโต้ตอบ ใช่มันคงจะดี ขอบใจ. แต่ฉันไม่พบคำอธิบายสำหรับตัวเลือก -T
bac0n avatar
cn flag
เป้าหมายไม่จำเป็นต้องมีอยู่ก่อนการคัดลอกอาจเป็นข้อแตกต่างหลัก ถัดไปหาก *source* เป็นไฟล์และกำหนดเป้าหมายไดเร็กทอรี คุณจะได้รับข้อผิดพลาดแทนที่จะเป็นไฟล์ที่ถูกคัดลอกไปยังไดเร็กทอรี (ควรเป็น cp -aT หรือ -rT สำหรับการเรียกซ้ำ)
Nate T avatar
it flag
@Maik It's Bash มี 10 วิธีแยกกันในการทำสิ่งใด ฉันเพิ่งทำงานกับสคริปต์ใช่ ที่ใช้ทั้ง `cp -a` และการเปลี่ยนเส้นทางจากการค้นหาภายในระยะห่างระหว่างกันประมาณ 10-15 บรรทัด ฉันขอแนะนำให้ดูเพิ่มเติมในทุกรุ่นและเรียนรู้นิสัยใจคอและคำเตือนของแต่ละเวอร์ชัน ตัวอย่างเช่น ชุดคำสั่งอาจเหมือนกันทุกประการโดยมี params แต่มีเพียงชุดเดียวที่อ่านจาก stdin โดยที่ไม่มีเลย สิ่งนี้อาจไม่สำคัญถึง 90% ของเวลา แต่ในครั้งที่ 10 นั้น การรู้ส่วนต่างนั้นคุ้มค่าคิดว่าฉันจะชี้ให้เห็นว่ามันเป็นสิ่งที่ฉันตั้งเป้าไว้ แต่ฉันคิดว่าฉันพลาดเป้าหมายไปก่อนหน้านี้
terdon avatar
cn flag
โปรดทราบว่าการดำเนินการนี้จะคัดลอกไดเร็กทอรีย่อยด้วย ในขณะที่คำถามของคุณถามเกี่ยวกับไฟล์เท่านั้น ไม่แน่ใจว่าตั้งใจหรือไม่
Maik Lowrey avatar
in flag
@terdon ไฟล์และโฟลเดอร์ ฉันจะอัปเดตชื่อเรื่องจากคำถามของฉัน
Score:-1
ธง it

คุณเพียงแค่ต้องการสัญลักษณ์ตัวแทนที่ส่วนท้ายของคำสั่งดังนี้:

แอปพลิเคชัน cp -r/* ./
Maik Lowrey avatar
in flag
ขอบคุณสำหรับการตอบรับ แต่มันไม่ทำงาน `cp: ไม่มีตัวดำเนินการไฟล์ปลายทางหลังจาก 'sub/*'`
Maik Lowrey avatar
in flag
ใช่ว่าจะใช้ได้เช่นกัน แต่ฉันใช้ `cp -a app/ . ./` มาก่อนและทำงานได้อย่างสมบูรณ์ ฉันไม่สงบโดยความคิดเห็นของ bac0n คุณรู้หรือไม่ว่าตัวเลือก `-T` หมายถึงอะไร
Nate T avatar
it flag
ดีใจที่คุณได้รับมัน @MaikLowrey
Maik Lowrey avatar
in flag
ขอบคุณสำหรับเวลาและความพยายามของคุณ!
terdon avatar
cn flag
@MaikLowrey คำตอบเดิมมีเครื่องหมายคำพูดรอบ `"application/*"` ซึ่งทำให้ไม่สามารถขยาย glob (ไวด์การ์ด) ได้ ฉันแก้ไขแล้ว แต่คำสั่งที่สองผิดอย่างสมบูรณ์ ฉันเกรงว่า ฉัน _think_ สิ่งที่เนทหมายถึงคือสิ่งที่ต้องการ `find ./application/ -type f -exec cp {} ./ +`คำสั่งในคำตอบนี้จะมองหา _directories_ ในไดเร็กทอรี `/application/` แทน จากนั้นจะเพิ่มรายชื่อไดเร็กทอรีลงในไฟล์ชื่อ `/` ซึ่งจะล้มเหลวเนื่องจาก `/` เป็นไดเร็กทอรี
Maik Lowrey avatar
in flag
ขอบคุณ @terdon! คุณพูดถูก ฉันใช้ `cp -a app/ . ./` เป็นการดีที่สุดที่จะใช้คำสั่งด้วยตัวเลือก -i (ขอบคุณ bac0n) เพื่อหลีกเลี่ยงการเขียนทับไฟล์ที่มีชื่อเดียวกัน ในกรณีของฉัน "เฉพาะ" .gitigniore ถูกเขียนทับ ควรใช้คำสั่งที่มีการเรียกซ้ำอย่างระมัดระวัง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา