หาเป้าหมายและทำ command อื่นต่อ
บางครั้งต้องการหาไฟล์หรือ ไดเรคทอรี ซึ่งไม่รู้อยู่ ณ จุดไหน ถ้าเจอแล้วต้องทำอะไรต่อ
เราสามารถทำได้โดยใช้คำสั่ง Find
การค้นหา directory หรือ ชื่อไฟล์ใน directory ที่ต้องการค้น
Linux command “.” หมายถึง current directory ในการกรณีไม่ใส่ path ในการค้นหา
find [pathnames] [conditions] find . -name "[file name or directory name]" ตัวอย่าง find /home/data/ -name "*.log" find . -name "*data*.*" |
ค้นหาคำ
ค้นหาในคำ <div id="newuser"> ทุกไฟล์ใน /export/web/code/ find /export/web/code/ -exec grep -l "<div id=\"newuser\">" {} \; ค้นหาคำ "postcode" ในทุกๆ ไฟล์ในไดเรคทอรีปัจจุบัน find . -exec grep -l "postcode" {} \; ค้นหาคำ "postcode" ในทุกๆ ไฟล์ในไดเรคทอรีนั้น find /home/username/HEAD/production/cust/templates -exec grep -l "postcode" {} \; |
หาและแทนที่
ใช้ Find หาไฟล์ และใช้คำสั่ง sed ในการหาคำและ replace syntax find [directory] -name [specify name] -exec sed -i "s/[find string]/[replace with]/g" {} \; เช่น find . -name "data.txt" -exec sed -i "s/cat/dog/g" {} \; หาไฟล์ data.txt ในไดเรคทอรีปัจจุบัน และ replace cat ด้วย dog |
หาและลบ
บางครั้งเราต้องการลบไฟล์ที่ไม่จำเป็นออก เช่น log เก่าๆ ของงานต่างๆ หลักการคือ หาไฟล์ หรือหาไดเรคทอรี แล้วถ้าเจอก็ลบซะ เราต้องรู้การใช้คำสั่ง 2 คำสั่ง คือ find และ rm แต่จะให้ทำงานพร้อมไปกับหาเจอเลย โดยที่เราไม่ต้องตามไปลบออกที่หลัง find . -name *_11*.log -exec rm {} \; หาไฟล์อะไรก็ได้ที่มี _11 และนามสกุล log ถ้าหาเจอแล้วลบ find . -type d -exec rm -r {} \; หาไดเรคทอรี แล้วลบ find . -type f -mtime +0 -exec rm {} \; หาไฟล์ที่มีการเปลี่ยนแปลง เจอแล้วลบ |
Find and Sort by last modified
It's useful when we would like to check the latest update. Go to directory you would like to check, the run command follow instruction below: find . -type f -mtime -[day] -ls | sort -k8,9r // syntax find = look at present date to previous date [day] and sort with column 8 and 9 find . -type f -mtime -1 -ls | sort -k8,9r // check yesterday to today and sort by month and day find . -type f -mtime -3 -exec ls --full-time {} \; | sort -k6,7 |
Find and Get the size of all directories in the current directory
find . -maxdepth 1 -type d -print | xargs du -sk | sort -rn // maxdepth 1 = only category under current directory // -type d = only directory // xargs = pass list of directory to du command |
Find, then copy to one directory
find [path-looking] -name "[keyword]" -exec cp [--parents] -r {} [destination]\; path-looking: directory or folder that we would like to look for (e.g. production/generic/wireframe/USdummycontent) keyword: wording to specific to find (e.g. data.rec, ae, wz*.*) --parents: append source path to DIRECTORY -r: copy directories recursively destination: directory or folder you would like to copy to Example: find production/generic/site/language/ -name "fr" -exec cp --parents -r {} only_th/ \; (copy all fr folders to only_th folder) |
Find, then copy to the same directory
find [path] -name "[keyword]" | awk '{print "cp -r "$1" "$1";"}' | sed "s/[keyword]\;/[newkeyword]/g" | sh Ex:find . -name "en" | awk '{print "cp -r "$1" "$1";"}' | sed "s/en\;/ae/g" | sh |