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 — #
start_path=$1;
flag=$2;
search_file=error_log;
rmlog=rmlog.log;

# — check input path if not input set default to current directory “.” — #
if [ “$#” -eq 0 ] ; then start_path=”.”; fi

# — set help show syntax how to use this script — #
if [ “$1” = “-help” ] ; then
echo ” $0 {-y} “;
echo ” -y = allow to remove “;
fi

# — List all error_log file to remove — #
/usr/bin/find $start_path -name $search_file -ls > $rmlog;

# — remove error_log file when put “-y” argument — #
if [ “$flag” = “-y” ]; then

/usr/bin/find $start_path -name $search_file -exec rm -Rf {} \;
fi

# — Display error_log file to remove — #
echo “list error_log file : “;
cat $rmlog;

exit 0;

ปล. ถ้าต้องการนำไปใช้ลบไฟล์ต่างๆ ก็เพียงแต่เปลี่ยนตัวแปร search_file=<ชื่อไฟล์อื่น> หรือใช้รับจาก input argument ได้ เช่น search_file=$2 หมายถึงรับค่า input argument ตัวที่ 2

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *