ฉันมีไดเรกทอรีที่ไม่ได้แพ็ค แต่อยู่ในโฟลเดอร์ ฉันจะย้ายเนื้อหาขึ้นหนึ่งระดับได้อย่างไร ฉันกำลังเข้าถึง CentOS ผ่าน SSH
ฉันมีไดเรกทอรีที่ไม่ได้แพ็ค แต่อยู่ในโฟลเดอร์ ฉันจะย้ายเนื้อหาขึ้นหนึ่งระดับได้อย่างไร ฉันกำลังเข้าถึง CentOS ผ่าน SSH
คำตอบ:
ด้วยโฟลเดอร์ชื่อ 'myfolder' และเพิ่มขึ้นหนึ่งระดับในลำดับชั้นของไฟล์ (จุดที่คุณต้องการใส่) คำสั่งจะเป็น:
mv myfolder/* .
ตัวอย่างเช่นหากข้อมูลอยู่ใน/home/myuser/myfolder
นั้นจากการ/home/myuser/
เรียกใช้คำสั่ง
.*
จุดที่ดีใน การลบโฟลเดอร์ดั้งเดิมนั้นมีทั้งเรื่องเล็กน้อยและไม่ถูกถามดังนั้นเราจะให้ OP จัดการกับเขา / เธอ
*
และ.*
ในหนึ่งบรรทัด? เพียงแค่อยากรู้อยากเห็น
mv
ทั้งหมดจะเป็นแหล่งที่มายกเว้นอาร์กิวเมนต์ LAST ที่ต้องเป็นเป้าหมายในการย้าย (และในกรณีที่มีหลายแหล่งจะต้องเป็นโฟลเดอร์)
/bin/mv: Argument list too long
เพียงเพื่อให้ชัดเจนจากคำตอบของ Rudu ข้างต้นและความคิดเห็น
หากคุณต้องการย้ายเนื้อหาทั้งหมดรวมถึงไฟล์ที่ขึ้นต้นด้วย (เช่น. htaccess, .git ฯลฯ ) คุณต้องรวมทั้ง * และ. * ไว้ในคำสั่งของคุณ ชอบมาก
mv subfolder/* subfolder/.* .
ที่จะย้ายเนื้อหาของโฟลเดอร์ย่อยไปยังโฟลเดอร์ปัจจุบันของคุณ สังเกตช่องว่างก่อน "." ล่าสุด
mv: rename fake/. to ./.: Invalid argument
และmv: rename fake/.. to ./..: Invalid argument
นี่เป็นไปได้ด้วยวิธีการดังต่อไปนี้:
การใช้rsync
:
rsync -vua --delete-after foo/ .
การใช้cp
และrmdir
:
cp -vaR foo/. . && rmdir foo/
การใช้mv
(พร้อมdotglob
ตัวเลือกเปิดใช้งาน):
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.
foo/
โฟลเดอร์ของคุณอยู่ที่ไหนซึ่งเนื้อหาจะถูกเลื่อนขึ้นหนึ่งระดับ
ดู: และhelp shopt
man bash
การใช้mv
(ตามที่แนะนำที่นี่ ):
mv foo/* foo/.[^.]* . && rmdir foo/
หมายเหตุ: foo/..bar..
มันจะพลาดไฟล์ที่เรียกว่า
หมายเหตุ: สำหรับเปลือกหอย POSIX [!.]
คุณจะต้อง
-v
, -u
, -a
และ-r
ทำ? AFAICT -v
เป็น verbose ซึ่งทำให้ rsync พิมพ์ข้อมูลเพิ่มเติม -u
หมายถึงอัปเดต - คัดลอกไฟล์เฉพาะในกรณีที่ใหม่กว่า ดูเหมือนจะไม่เกี่ยวข้องกัน -a
หมายถึงเก็บถาวร สิ่งนั้นจะเป็นการคัดลอกเจ้าของและการอนุญาตของไฟล์และทำการซิงค์ซ้ำ -r
หมายถึงการเรียกซ้ำ -a
แต่ที่กล่าวมาแล้วโดย
-u
มีประโยชน์เมื่อคุณไม่ต้องการใช้เวลาพิเศษในการย้ายข้อมูลซึ่งมีอยู่แล้ว (โดยเฉพาะอุปกรณ์จัดเก็บข้อมูลที่ช้า) ฉันได้ลบ-r
เนื่องจากมีการครอบคลุมตาม-a
ที่คุณพูดถึง
mv foo/* foo/.[^.]* .
จะพลาดไฟล์ที่เรียกว่าfoo/..bar..
เช่น โปรดทราบว่าสำหรับเปลือกหอย POSIX [!.]
คุณจะต้อง
rsync -vua --delete-after foo/ .
จะลบทุกสิ่งที่อาจมีอยู่แล้วในไดเรกทอรีปัจจุบัน
แค่ออกคำสั่ง mv
mv (directory)/* .
ถ้าคุณต้องการลบไดเรกทอรีจากนั้นเพิ่ม
rm -rf (directory)
สมมติว่าคุณอยู่ในไดเรกทอรีหลักของ (ไดเรกทอรี)
หากคุณอยู่ใน (ไดเรกทอรี) แล้ว
mv * ../
.DS_store
ใน macOS mv
คำสั่งดังกล่าวจะไม่ย้ายผู้ (ไม่รวมdotglob
ชุด)
สำหรับผู้ที่อยู่ในเซิร์ฟเวอร์ที่ใช้ร่วมกันคุณจะต้องใช้สิ่งนี้
เพื่อย้ายไฟล์
mv -v ~/public_html/public_html/* ~/public_html/
เพื่อคัดลอกไฟล์
cp -a ~/public_html/public_html/* ~/public_html/
.*
ไม่ใช่เฉพาะ*
ไฟล์เก็บถาวรที่มีไฟล์ดอท นอกจากนี้ยังเพิ่ม `&& rmdir myfolder` ไปยังท้าย o เพื่อลบโฟลเดอร์ที่ไม่เกี่ยวข้องตอนนี้ นี่คือการบันทึกเพราะมันจะทำงานเฉพาะถ้า mv กลับมาประสบความสำเร็จและเพราะ rmdir จะไม่ลบไดเรกทอรีที่ไม่ว่างเปล่า