ISAG's Blog --AYBABTU

Monday, September 13, 2004

command line กับ file

command line ของ Unix/Linux เป็นเหมือนยาขม บ้างก็ทนอมจนหวาน บ้างก็บ้วนทิ้งตั้งแต่แรกแตะลิ้น ขอแนะนำเทคนิคเล็กๆน้อยๆกับการค้นหาไฟล์ ย้าย เปลี่ยนชื่อไฟล์บน Linux

  1. จะหาไฟล์ที่มีคำว่า XXX ได้ด้วยคำสั่งง่ายๆ
  2. bash$ grep XXX *
    หรือถ้าจะเข้าไปหาถึงข้างในก็เติม -R เป็น grep -R XXXX *


  3. หาไฟล์ที่มีชื่อว่า YYY ได้ด้วยคำสั่งธรรมดาๆว่า
  4. bash$ find ./ -name YYY 
    หรือถ้าจะใช้ wildcard ให้ YYY เป็นส่วนนึงในไฟล์ก็ได้เป็น find ./ -name *YYY*


  5. แล้วถ้าหาไฟล์ที่มีส่วนนึงในชื่อเป็น XXX และมีคำว่า YYY อยู่ข้างในล่ะ?
  6. bash$ find ./ -name *XXX* -exec grep YYY -l {} \;


  7. ถ้าจะเปลี่ยนชื่อไฟล์ทั้งหมดใน directory ที่มีคำว่า DSC*.JPG เป็น dsc*.jpg ล่ะครับ?
  8. 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