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

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre> <blockquote> <img> <h3> <h4> <h5>
  • Lines and paragraphs break automatically.
  • E-Mail addresses are hidden with reCAPTCHA Mailhide.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.