bash tips: เกร็ดการลบไฟล์

ลูกน้องเอาธัมบ์ไดรฟ์มาให้หาไวรัส
ผลปรากฎว่าพบไฟล์ที่เป็นนามสกุล exe เป็นจำนวนมากภายใต้ไดเรกทอรี่ย่อยเป็นร้อย
ทางแก้คือสแกนแล้วเก็บชื่อไฟล์ไว้ ตัวอย่างของเนื้อไฟล์ที่ถูกสแกนเก็บไว้ เช่น

PhotoShop 7.0/• วิธีทำตัวเยลลลี่ •_files/• วิธีทำตัวเยลลลี่ •_files.exe: W32.Autoit.Obfus FOUND
PhotoShop 7.0/• วิธีทำตัวหนังสือชอล์ค •_files/truehitsstat_files/truehitsstat_files.exe: W32.Autoit.Obfus FOUND
...

จะเห็นว่ามีรูปแบบที่เราจะตัดโดยใช้คำสั่ง cut ได้คือตั้งแต่เครื่องหมาย : เป็นต้นไป

คำสั่งที่ใช้คือ

cut -d: -f1

-d: คือใช้ : เป็นตัวแบ่ง
-f1 คือเมื่อแบ่งแล้ว เราจะเอาสดมภ์ที่ 1 มาใช้งาน

แต่เราจะแก้ไขเนื้อไฟล์ให้เหมาะสมเล็กน้อย คือตัดท่อนล่างของไฟล์ออก ให้เหลือเฉพาะชื่อไฟล์ที่ติดไวรัส แล้วจึงเอาเนื้อไฟล์นั้นมาเป็นข้อมูลเข้า เพื่อจะมาลบไฟล์ที่ติดไวรัสจริง ๆ

แต่มีปัญหาเพิ่มคือ ชื่อไฟล์ประกอบด้วยช่องว่างจำนวนมาก ไม่สามารถใช้คำสั่ง for i in `cat file` ได้

ค้นกูเกิลดู พบว่าเขาใช้คำสั่ง while read VARIABLE

สรุปคำสั่งทั้งหมดมาเป็นขั้นตอนดังนี้

สมมุติว่าค้นหาไวรัสในธัมบ์ไดรฟ์ในไดเรกทอรี /media/disk

ไปที่ที่ทำงาน

$ cd /media/disk

สแกนไวรัส แล้วเก็บผลไว้ที่ ~/virus.txt

$ clamscan -i -r * > ~/virus.txt

-i คือให้แสดงเฉพาะไฟล์ที่ติดไวรัส
-r คือให้ขุดลึกลงไปในไดเรกทอรี่ย่อยด้วย

แก้ไขไฟล์เล็กน้อย โดยตัดรายงานส่วนท้ายออก ยกตัวอย่างส่วนที่ตัดออกคือ

$ vi ~/virus.txt
----------- SCAN SUMMARY -----------
Known viruses: 203664
Engine version: 0.92
Scanned directories: 97
Scanned files: 1234
Infected files: 252
Data scanned: 378.68 MB
Time: 130.603 sec (2 m 10 s)

ทีนี้ก็ถึงเวลาลบจริง ๆ แล้ว ***ใช้ด้วยความระมัดระวังนะครับ***
ถ้ายังไม่แน่ใจ อาจแทนที่คำสั่ง rm ด้วยคำสั่ง ls ลองดูก่อน

$ cat ~/virus.txt | cut -d: -f1 | while read FILE; do rm "$FILE"; done

เสร็จแล้วครับ

หมายเหตุ

  • ต้องติดตั้ง clamscan ไว้ก่อน ถ้ายัง ติดตั้งด้วยคำสั่ง
    $ sudo aptitude install clamav
    $ sudo freshclam
  • ปกติการเมานท์ธัมบ์ไดรฟ์ที่เป็นระบบไฟล์ vfat เขาจะเมานท์ด้วยค่าปริยายด้วยรหัสอักขระภาษาอังกฤษ ทำให้อ่านชื่อไฟล์ภาษาไทยไม่รู้เรื่อง ซึ่งจริง ๆ แล้วต้องตั้งค่ารหัสอักขระเป็น utf-8
    เราสามารถบังคับด้วยการเมานท์ใหม่ หรือตั้งค่ารหัสอักขระถาวร ดูวิธีการได้ที่ th.gnome.org: เกร็ดการแก้รหัสอักขระ usb drive

ที่มา - macgeekery: Handling Filenames with Spaces in Bash

Topic: 
Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้