วิธีที่ฉันจะเข้าใกล้มันคือการรับ uuids จากไฟล์ก่อนจากนั้นใช้ find
awk '{print $1}' listfile.txt | while read fileName;do find /etc -name "$fileName*" -printf "%p FOUND\n" 2> /dev/null;done
เพื่อความสะดวก
awk '{print $1}' listfile.txt | \
while read fileName;do \
find /etc -name "$fileName*" -printf "%p FOUND\n" 2> /dev/null;
done
ตัวอย่างที่มีรายชื่อของไฟล์ที่/etc/
กำลังมองหา passwd กลุ่ม fstab และชื่อไฟล์ ThisDOESNTEXIST
$ awk '{print $1}' listfile.txt | while read fileName;do find /etc -name "$fileName*" -printf "%p FOUND\n" 2> /dev/null; done
/etc/pam.d/passwd FOUND
/etc/cron.daily/passwd FOUND
/etc/passwd FOUND
/etc/group FOUND
/etc/iproute2/group FOUND
/etc/fstab FOUND
เมื่อคุณพูดถึงว่าไดเรกทอรีนั้นเรียบคุณสามารถใช้-printf "%f\n"
ตัวเลือกเพื่อพิมพ์ชื่อไฟล์เอง
สิ่งนี้ไม่ได้ทำคือการแสดงรายการไฟล์ที่หายไป find
ข้อเสียเล็ก ๆ น้อย ๆ คือมันไม่ได้บอกคุณว่ามันหาไฟล์ไม่ได้ก็ต่อเมื่อตรงกับบางอย่าง อย่างไรก็ตามสิ่งหนึ่งที่สามารถทำได้คือการตรวจสอบเอาท์พุท - ถ้าเอาท์พุทว่างเปล่าเรามีไฟล์หายไป
awk '{print $1}' listfile.txt | while read fileName;do RESULT="$(find /etc -name "$fileName*" -printf "%p\n" 2> /dev/null )"; [ -z "$RESULT" ] && echo "$fileName not found" || echo "$fileName found" ;done
อ่านเพิ่มเติมได้:
awk '{print $1}' listfile.txt | \
while read fileName;do \
RESULT="$(find /etc -name "$fileName*" -printf "%p\n" 2> /dev/null )"; \
[ -z "$RESULT" ] && echo "$fileName not found" || \
echo "$fileName found"
done
และนี่คือวิธีที่มันทำงานเป็นสคริปต์ขนาดเล็ก:
skolodya@ubuntu:$ ./listfiles.sh
passwd found
group found
fstab found
THISDONTEXIST not found
skolodya@ubuntu:$ cat listfiles.sh
#!/bin/bash
awk '{print $1}' listfile.txt | \
while read fileName;do \
RESULT="$(find /etc -name "$fileName*" -printf "%p\n" 2> /dev/null )"; \
[ -z "$RESULT" ] && echo "$fileName not found" || \
echo "$fileName found"
done
หนึ่งสามารถใช้stat
เป็นทางเลือกเนื่องจากมันเป็นไดเร็กตอรี่แฟลต, แต่ตะโกนรหัสจะไม่ทำงานซ้ำสำหรับไดเรกทอรีย่อยถ้าคุณเคยตัดสินใจที่จะเพิ่ม:
$ awk '{print $1}' listfile.txt | while read fileName;do stat /etc/"$fileName"* 1> /dev/null ;done
stat: cannot stat ‘/etc/THISDONTEXIST*’: No such file or directory
หากเรานำstat
แนวคิดนี้ไปใช้เราสามารถใช้รหัสทางออกของสถิติเป็นตัวบ่งชี้ว่ามีไฟล์อยู่หรือไม่ Effectivelly เราต้องการทำสิ่งนี้:
$ awk '{print $1}' listfile.txt | while read fileName;do if stat /etc/"$fileName"* &> /dev/null;then echo "$fileName found"; else echo "$fileName NOT found"; fi ;done
วิ่งตัวอย่าง:
skolodya@ubuntu:$ awk '{print $1}' listfile.txt | \
> while read FILE; do
> if stat /etc/"$FILE" &> /dev/null ;then
> echo "$FILE found"
> else echo "$FILE NOT found"
> fi
> done
passwd found
group found
fstab found
THISDONTEXIST NOT found