ฉันต้องการทราบว่าฉันสามารถย้ายไฟล์ทั้งหมดจากโฟลเดอร์ไปยังโฟลเดอร์อื่นด้วยบรรทัดคำสั่งได้อย่างไร
สมมติว่าฉันอยู่ในโฟลเดอร์ดาวน์โหลดและมีไฟล์ 100 ไฟล์ที่ฉันต้องการย้ายไปยังโฟลเดอร์วิดีโอของฉันโดยไม่ต้องเขียนชื่อไฟล์ทั้งหมด
ฉันต้องการทราบว่าฉันสามารถย้ายไฟล์ทั้งหมดจากโฟลเดอร์ไปยังโฟลเดอร์อื่นด้วยบรรทัดคำสั่งได้อย่างไร
สมมติว่าฉันอยู่ในโฟลเดอร์ดาวน์โหลดและมีไฟล์ 100 ไฟล์ที่ฉันต้องการย้ายไปยังโฟลเดอร์วิดีโอของฉันโดยไม่ต้องเขียนชื่อไฟล์ทั้งหมด
คำตอบ:
เปิด terminal และดำเนินการคำสั่งนี้:
mv -v ~/Downloads/* ~/Videos/
มันจะย้ายไฟล์และโฟลเดอร์ทั้งหมดจากโฟลเดอร์ดาวน์โหลดไปยังโฟลเดอร์วิดีโอ
หากต้องการย้ายไฟล์ทั้งหมด แต่ไม่ใช่โฟลเดอร์:
หากคุณต้องการย้ายไฟล์ทั้งหมด (แต่ไม่ใช่โฟลเดอร์) จากโฟลเดอร์ดาวน์โหลดไปยังโฟลเดอร์วิดีโอให้ใช้คำสั่งนี้
find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos
หากต้องการย้ายเฉพาะไฟล์จากโฟลเดอร์ดาวน์โหลด แต่ไม่ใช่จากโฟลเดอร์ย่อย:
หากคุณต้องการย้ายไฟล์ทั้งหมดจากโฟลเดอร์ดาวน์โหลด แต่ไม่ใช่ไฟล์ภายในโฟลเดอร์ในโฟลเดอร์ดาวน์โหลดให้ใช้คำสั่งนี้:
find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos
ที่นี่-maxdepth
ตัวเลือกระบุว่าการค้นหาแบบลึกควรลอง1
หมายถึงเฉพาะไดเรกทอรีที่ระบุในคำสั่ง find คุณสามารถลองใช้2
, 3
ยังที่จะทดสอบ
-print0 | xargs -0 mv -t ~/Videos
สามารถทำได้อย่างมีประสิทธิภาพยิ่งขึ้นด้วย-exec mv -t ~/Videos \{\} \+
:-)
mv -v ~/Downloads/* ~/Videos/
ไม่สามารถใช้งานไฟล์ที่ซ่อนได้
mv ~/Downloads/* ~/Videos
mv
มันจะย้ายไฟล์ทั้งหมดรวมทั้งโฟลเดอร์ย่อยในไดเรกทอรีที่คุณต้องการ หากคุณต้องการcp
(คัดลอก) หรือrm
(ลบ) คุณจะต้อง-r
ใช้ตัวเลือก (เรียกซ้ำ) เพื่อรวมโฟลเดอร์ย่อย
mv
ไม่จำเป็นต้องใช้ตัวเลือกแบบเรียกซ้ำเพื่อรวมโฟลเดอร์ย่อย หนึ่งสามารถใช้มันเพื่อการเปลี่ยนชื่อ
สำหรับกรณีง่าย ๆ :
mv ~/Downloads/* ~/Videos
หากคุณต้องการย้ายจุด (ซ่อน) ไฟล์ด้วยให้ตั้งค่าตัวเลือกเปลือกdotglob
shopt -s dotglob
mv ~/Downloads/* ~/Videos
สิ่งนี้ทำให้ชุดตัวเลือกของเชลล์
สำหรับการใช้ dotglob ครั้งเดียวให้เรียกใช้คำสั่งในเชลล์ย่อย:
(shopt -s dotglob; mv ~/Downloads/* ~/Videos)
(shopt -s dotglob; mv ~/Downloads/* ~/Videos)
เท่านั้น (ตัด) เนื้อหา (รวมถึงไฟล์ที่ซ่อนอยู่) ในกรณีนี้ต้องมีทั้งโฟลเดอร์ต้นทางและปลายทาง ในตอนท้ายไดเรกทอรีต้นทางจะว่างเปล่า
เป็นไปได้โดยใช้rsync
ตัวอย่างเช่น:
rsync -vau --remove-source-files src/ dst/
ที่อยู่:
-v
,--verbose
: เพิ่มการฟุ่มเฟื่อย
-a
,--archive
: โหมดเก็บถาวร; เท่ากับ-rlptgoD
(ไม่-H
,-A
,-X
)
-u
,--update
: ข้ามไฟล์ที่ใหม่กว่าบนตัวรับ
--remove-source-files
สิ่งนี้บอกrsync
ให้ลบออกจากด้านการส่งไฟล์ (หมายถึงไม่ใช่ไดเรกทอรี) ที่เป็นส่วนหนึ่งของการถ่ายโอนและทำซ้ำสำเร็จในด้านการรับ
หากคุณได้รับสิทธิ์รูทนำหน้าด้วยsudo
เพื่อลบล้างปัญหาสิทธิ์ที่อาจเกิดขึ้น
ใช้
mv -v ~/rootfolder/branch/* ~/rootfolder
ฉันหวังว่านี่จะช่วยได้. เพราะฉันมีความเจ็บปวดแบบเดียวกันและเสียเวลามากในการแก้ไขความผิดพลาดของฉัน
หากต้องการย้ายไดเรกทอรีที่มีหรือไม่มีเนื้อหาไปยังชื่อใหม่เช่นเดียวกับที่คุณใช้mv
คำสั่งเพื่อเปลี่ยนชื่อไฟล์:
mv -T dir1 dir2
ที่อยู่:
-T
ถือว่าปลายทางเป็นไฟล์ปกติdir1
เป็นชื่อดั้งเดิมของไดเรกทอรีdir2
เป็นชื่อใหม่ของไดเรกทอรีหมายเหตุ: dir2
ไม่จำเป็นต้องมีอยู่
ฉันหวังว่าสิ่งนี้จะช่วยให้ใครบางคนประหยัดเวลาได้มากเหมือน noob ก่อนหน้านี้ฉันจะสร้างไดเรกทอรีที่มีชื่อใหม่แล้วย้ายเนื้อหาของไดเรกทอรีไปยังไดเรกทอรีที่สร้างขึ้นก่อนหน้านี้
ใช้สำหรับไดเรกทอรีย่อย
Downloads/mp4
คำสั่งนี้จะเป็นประโยชน์เมื่อไฟล์จำนวนมากได้รับการบันทึกในโฟลเดอร์ย่อยของไดเรกทอรีคือเป้าหมาย ในตัวอย่างนี้การรันmv -T Downloads/mp4 Videos
จะส่งผลให้mp4
โฟลเดอร์ย่อยถูกลบและไฟล์ทั้งหมดที่อยู่ภายในจะถูกย้ายไปยังโฟลเดอร์วิดีโอ
dir1
ลบ นอกเหนือจากข้อควรระวังนี้คำตอบนี้ยังระบุถึงสิ่งที่ดีสำหรับการใช้งานประจำวัน
mv fileA fileB
แต่การ-T
ตั้งค่าสถานะในกรณีนี้ถือว่าปลายทาง / ไดเรกทอรีเป็นไฟล์และเปลี่ยนชื่อ
cd folderNamehere
pwd
. นี่จะพิมพ์ไดเรกทอรีที่คุณต้องการย้ายด้วยcd folderNamehere
mv *.* typeAnswerFromStep2here
ที่จะย้ายไฟล์ทั้งหมดจากไดเรกทอรีนั้นไปยังอีก
foo.txt
, bar.
และbar
ทั้งสองอย่างbar.
และbar
จะไม่ถูกย้าย ใช้*
แทน*.*
การดูแลที่ แต่ในทั้งสองกรณีไฟล์ที่ซ่อนเช่น: .foobar
จะไม่ถูกย้าย
mv source_path/* destination_path/
ที่นี่คุณต้องใส่เครื่องหมายทับหน้าและ*
หลังพา ธ ต้นทางเพื่อที่จะใช้ไฟล์ภายใน source_path แทนที่จะเป็นไดเร็กทอรีต้นทางแบบสมบูรณ์
ตัวอย่าง: mv /home/username/test/* /home/username/test2/
คำสั่งดังกล่าวย้ายไฟล์ทั้งหมด (เว้นแต่พวกเขาจะถูกซ่อนอยู่) ในไดเรกทอรีต้นทางไปยังไดเรกทอรีปลายทาง
ลองมัน
find ~/Desktop -type f -iname "*.mp4" -exec mv {} ~/Videos \;
-type พร้อมกับอาร์กิวเมนต์ -type คุณสามารถระบุ type file.on คำสั่งนี้ที่เป็นค่าเฉลี่ย file.if โดยใช้ -d ที่หมายถึงไดเรกทอรี
- ชื่อ: วิธีที่พบได้บ่อยและชัดเจนที่สุดในการค้นหาไฟล์คือการใช้ -name argument.if ของคุณไม่แน่ใจเกี่ยวกับตัวพิมพ์เล็ก - ใหญ่คุณสามารถใช้อาร์กิวเมนต์ -iname
mv {} และสุดท้ายเพื่อระบุไดเรกทอรีเป้าหมายจากนั้นย้ายไฟล์ไปที่นั่นโดยใช้อาร์กิวเมนต์ mv {}
files
แต่มีคนแสดงวิธีย้ายไม่เพียงfiles
แต่folders
เช่นกัน ไม่เป็นไร?