ใน Linux (Ubuntu) คุณจะย้ายไฟล์และไดเรกทอรีทั้งหมดไปยังไดเรกทอรีหลักได้อย่างไร
ใน Linux (Ubuntu) คุณจะย้ายไฟล์และไดเรกทอรีทั้งหมดไปยังไดเรกทอรีหลักได้อย่างไร
คำตอบ:
หา -maxdepth 1 -exec mv {} .. \;
จะเป็นการย้ายไฟล์ที่ซ่อนอยู่เช่นกัน
คุณจะได้รับข้อความ:
mv: ย้ายไม่ได้ '.' เป็น `../. ': อุปกรณ์หรือทรัพยากรไม่ว่าง
เมื่อพยายามย้าย.
(ไดเรกทอรีปัจจุบัน) แต่จะไม่ทำให้เกิดอันตรายใด ๆ
-maxdepth 1
เพื่อให้แน่ใจ
ฉันมาที่นี่เพราะฉันใหม่สำหรับเรื่องนี้เช่นกัน ด้วยเหตุผลบางอย่างข้างต้นไม่ได้ทำเคล็ดลับสำหรับฉัน สิ่งที่ฉันทำเพื่อย้ายไฟล์ทั้งหมดจาก dir ไปยัง parent dir คือ:
cd to/the/dir
mv * ../
(cd ${ANDROID_NDK_HOME}/android-ndk-r14b/ && mv * ../)
พิมพ์สิ่งนี้ในเปลือก:
mv *.* ..
ซึ่งจะย้ายไฟล์ทั้งหมดในระดับหนึ่งขึ้นไป
ตัวละคร*
เป็นสัญลักษณ์แทน ดังนั้น*.deb
จะย้ายไฟล์. deb ทั้งหมดและZeitgeist.*
จะย้าย Zeitgeist.avi และ Zeitgeist.srt หนึ่งโฟลเดอร์ขึ้นไปเนื่องจากแน่นอน..
จะระบุไดเรกทอรีหลัก
หากต้องการย้ายทุกอย่างรวมถึงโฟลเดอร์ ฯลฯ เพียงใช้*
แทน*.*
*
ไม่*.*
รวมไดเรกทอรี
มันไม่ง่ายกว่า:
mv * ../
ในการย้ายไฟล์ที่ซ่อนอยู่ด้วย:
mv /path/subfolder/{.,}* /path/
mv
เป็นคำสั่งเพื่อย้ายไฟล์*
หมายถึงไฟล์และโฟลเดอร์ทั้งหมดและ../
เป็นเส้นทางไปยังไดเรกทอรีหลัก
ในทุบตีคุณสามารถใช้ shopt -s dotglob เพื่อทำให้ * จับคู่ไฟล์ทั้งหมดและย้ายไฟล์ได้ง่ายๆ
shopt -s dotglob; mv * ..
นี่ไม่ใช่วิธีที่ดีที่สุดเนื่องจากการตั้งค่าเป็นแบบถาวรสำหรับเชลล์จนกว่าคุณจะเปลี่ยน
shopt -u dotglob
แต่ฉันคิดว่ามันดีที่จะรู้
(shopt -s dotglob && mv * ..)
นี้: ด้วยวิธีนี้ตัวเลือกจะอยู่ภายในกับเชลล์ย่อยนั้นเท่านั้น
วิธีการที่ทำให้ไม่มีข้อผิดพลาดและทำงานทุกครั้ง:
ls -1A . | while read -r file
do
mv "./${file}" ..
done
find . -maxdepth 2 -type f -exec mv {} .. \;
ฉันใช้รูปแบบด้านบนเพื่อย้ายไฟล์ทั้งหมดจากโฟลเดอร์ย่อยไปยังพาเรนต์
ฉันได้รับข้อมูลในโฟลเดอร์ตามปี แต่พบโดยใช้เมทาดาทาฉันสามารถเก็บข้อมูลทั้งหมดไว้ในโฟลเดอร์เดียวกันซึ่งทำให้จัดการได้ง่ายขึ้น
เช่น.
/data/2001/file_1
/data/2002/file_2
/data/2003/file_3
สมมติว่าไฟล์ที่ซ่อนของคุณเริ่มต้นด้วยจุดตามด้วยตัวอักษรหรือตัวเลข (ซึ่งควรใช้) คุณสามารถใช้
mv * .[A-Za-z0-9]* ..
.[A-Za-z0-9]*
ส่วนหนึ่งคือการทำให้แน่ใจว่าคุณไม่พยายามที่จะย้าย.
หรือ..
พร้อมที่จะล้มเหลว
การย้ายไฟล์และโฟลเดอร์ทั้งหมดไปยังไดเรกทอรีหลักใน Linux ทำได้ง่าย
ไปที่โฟลเดอร์นั้นและใช้คำสั่งนี้:
mv * /the full path
ตัวอย่างเช่นหากไฟล์และโฟลเดอร์ของคุณเป็นดังนี้:
/home/abcuser/test/1.txt
2.txt
3.jpg
4.php
1folder
2folder
ไปที่โฟลเดอร์นั้นผ่าน cd:
cd /home/abcuser/test
mv * /home/abcuser
ไฟล์และโฟลเดอร์ทั้งหมดของคุณจะย้ายไปที่โฟลเดอร์ abcuser (ไดเรกทอรีหลัก)
/the full path
ไม่ทำงานใน Linux /the\ full\ path
คุณจะต้องหลบหนีช่องว่างด้วย
ไม่จำเป็นต้องเปลี่ยนไดเรกทอรี เพียงรวม * ที่ท้ายเส้นทาง:
mv /my/folder/child/* /my/folder/
ด้านบนย้ายเฉพาะไฟล์ที่ไม่ซ่อน หากต้องการย้ายเฉพาะไฟล์ที่ซ่อนอยู่ให้ใช้ *
mv /my/folder/child/.* /my/folder/
เหนือสองสามารถรวมในคำสั่งเดียว:
mv /my/folder/child/{.,}* /my/folder/
ดูเพิ่มเติมที่: วิธีย้ายไฟล์ทั้งหมดรวมถึงไฟล์ที่ซ่อนอยู่ในไดเรกทอรีหลักผ่าน *
find -type f|while read line; do mv $line ${line##*/}; done
find
เข้าwhile read
เป็นวิธีที่ดีที่จะใช้find
และคำตอบที่ดีได้รับการโพสต์แล้ว
สลับไปที่ไดเรกทอรีย่อยและเรียกใช้คำสั่งต่อไปนี้เพื่อคัดลอกหรือย้ายไฟล์
ตัวอย่าง: a คือไดเรกทอรีหลักและ b เป็นไดเรกทอรีย่อยเราต้องการย้าย / คัดลอกไฟล์ทั้งหมดจาก b ไปยัง a (ไดเรกทอรีย่อยไปยังไดเรกทอรีหลัก)
cd b
cp * ..
mv * ..