Shell Script : Find File and Delete
บนระบบปฏิบัติการ Unix, Linux จะมีชุดคำสั่งต่างๆที่เราสามารถเรียกใช้ได้ผ่านโปรแกรมที่เรียกว่า “Shell” ซึ่ง Shell ที่ติดตั้งมาบนระบบปฏิบัติการ Unix, Linux ส่วนใหญ่จะมี Bourne shell (sh), Korn shell (ksh), C shell (csh),Bourne Again SHell (bash) เป็นต้น
โปรแกรม shell นี้จะถูกเรียกทำงานตั้งแต่เรา login เข้ามาในระบบ เปรียบเสมือน window explorer ของวินโดว์ เป็นโปรแกรมที่เราใช้ส่งคำสั่งต่างๆให้ระบบปฏิบัติการทำงานได้
สำหรับในตัวอย่างนี้ เราจะเรียกใช้ชุดคำสั่งในการค้นหาไฟล์ (/usr/bin/find) เพื่อทำการค้นหาไฟล์ตามที่เราต้องการ โดยคำสั่ง find มีรูปแบบการเรียกใช้ดังนี้
find [path…] [expression] |
- [path…] ให้เรากำหนด directory path ที่เริ่มต้นค้นหา
- [expression] ให้เรากำหนดรายละเอียดการค้นหา
เราสามารถเรียกดู expression ทั้งหมดของคำสั่ง find ได้โดยเรียกใช้คำสั่ง /usr/bin/man (manual)
$ man find |
ตัวอย่าง 1 ค้นหาไฟล์ที่ชื่อ error_log
#find / -name error_log |
/tmp/error_log /tmp/tmp2/error_log |
- / = root directory
- -name
= expression ที่ค้นหาไฟล์โดยค้นจากชื่อไฟล์
ตัวอย่าง 2 ค้นหาไฟล์ที่ชื่อ error_log แล้วแสดงรายละเอียดของไฟล์
ตัวอย่างนี้เราเพียงแต่เพิ่ม action เข้าไป เมื่อค้นเจอแล้วจะทำอะไร ในตัวอย่างต้องการแสดงรายละเอียดไฟล์ ซึ่งเราสามารถเรียกใช้ action -ls or -print ได้ดังนี้
#find / -name error_log -ls |
163896 4 -rw-r–r– 1 root root 0 Mar 21 08:48 /tmp/error_log 163906 4 -rw-r–r– 1 root root 0 Mar 21 08:48 /tmp/tmp2/error_log |
ตัวอย่าง 3 ค้นหาไฟล์ที่ชื่อ error_log แล้วทำการลบทิ้งด้วย
ตัวอย่างนี้เราจะเปลี่ยน action ใหม่ โดยเปลี่ยนไปเรียกคำสั่ง rm เพื่อทำการลบไฟล์ที่ค้นเจอดังนี้
#find / -name error_log -exec rm -Rf {} \; |
- -exec เป็น arguments ที่ระบุว่าจะเรียกใช้ชุดคำสั่งบน shell
- rm -Rf เป็นคำสั่งที่ใช้ในการลบไฟล์ที่ค้นหา
- {} ใช้แทนชื่อไฟล์ที่ค้นหามาได้ ซึ่งคำสั่ง rm -Rf จะต้องตามด้วยชื่อไฟล์ที่จะลบ
- \; เป็นตัวจบการทำงานของคำสั่ง
ตัวอย่าง Shell Script ที่นำไปใช้ในการลบไฟล์ error_log
#!/bin/sh
# — Define Variable — # # — check input path if not input set default to current directory “.” — # # — set help show syntax how to use this script — # # — List all error_log file to remove — # # — remove error_log file when put “-y” argument — # /usr/bin/find $start_path -name $search_file -exec rm -Rf {} \; # — Display error_log file to remove — # exit 0; |
ปล. ถ้าต้องการนำไปใช้ลบไฟล์ต่างๆ ก็เพียงแต่เปลี่ยนตัวแปร search_file=<ชื่อไฟล์อื่น> หรือใช้รับจาก input argument ได้ เช่น search_file=$2 หมายถึงรับค่า input argument ตัวที่ 2