command line กับ file
command line ของ Unix/Linux เป็นเหมือนยาขม บ้างก็ทนอมจนหวาน บ้างก็บ้วนทิ้งตั้งแต่แรกแตะลิ้น ขอแนะนำเทคนิคเล็กๆน้อยๆกับการค้นหาไฟล์ ย้าย เปลี่ยนชื่อไฟล์บน Linux
- จะหาไฟล์ที่มีคำว่า XXX ได้ด้วยคำสั่งง่ายๆ
- หาไฟล์ที่มีชื่อว่า YYY ได้ด้วยคำสั่งธรรมดาๆว่า
- แล้วถ้าหาไฟล์ที่มีส่วนนึงในชื่อเป็น XXX และมีคำว่า YYY อยู่ข้างในล่ะ?
- ถ้าจะเปลี่ยนชื่อไฟล์ทั้งหมดใน directory ที่มีคำว่า DSC*.JPG เป็น dsc*.jpg ล่ะครับ?
bash$ grep XXX *หรือถ้าจะเข้าไปหาถึงข้างในก็เติม -R เป็น grep -R XXXX *
bash$ find ./ -name YYYหรือถ้าจะใช้ wildcard ให้ YYY เป็นส่วนนึงในไฟล์ก็ได้เป็น find ./ -name *YYY*
bash$ find ./ -name *XXX* -exec grep YYY -l {} \;
for i in `ls DSC*.JPG ¦ grep ^D ¦ sed -e "s/DSC//" ¦ sed -e "s/.JPG/./"`; do echo mv DSC"$i"JPG dsc"$i"jpg ; doneเอ่อ คำสั่งนี้ยาวหน่อย แล้วคำสั่งก็ไม่เหมาะจะเอาไป execute มั่วๆเพราะมีบั๊กอยู่บ้าง เหมาะใช้ใน folder ที่มี file pattern เดิมๆ อย่างไฟล์ที่ออกมาจากกล้องดิจิทัล
อธิบายคำสั่งนิดนึงละกัน จะได้ใช้กันอย่างปลอดภัย
๑) เริ่มแรกเรา ls ไฟล์ในไดเร็กโทรีที่มีชื่อเชื่อว่า DSC*.JPG ก่อน
๒) แล้วก็เลือกเอาเฉพาะที่เริ่มต้นด้วย D
๓) หลังจากนั้นก็ตัดหัว (DSC) ออกด้วย sed -e "s/DSC//"
๔) ส่วนหางก็เอาออกด้วย sed -e "s/.JPG/./"
ถึงตรงนี้เราได้ input อยู่ในตัวแปล $i แล้วก็ do คำสั่งได้เลย อ่อ $i ต้องใส่ "" ด้วยไม่งั้นเชลล์จะเอาไปมั่วกับ JPG และ jpg ที่ต่อท้าย
คำเตือน: สำหรับคำสั่งนี้ แนะนำให้ do echo... ก่อน ถ้าทุกอย่างโอเคแล้วก็ค่อยเอาคำว่า echo ออก
0 Comments:
Post a Comment
<< Home