Cara saya mendekatinya adalah dengan mendapatkan uuids dari file terlebih dahulu, lalu gunakan find
awk '{print $1}' listfile.txt | while read fileName;do find /etc -name "$fileName*" -printf "%p FOUND\n" 2> /dev/null;done
Untuk keterbacaan,
awk '{print $1}' listfile.txt | \
while read fileName;do \
find /etc -name "$fileName*" -printf "%p FOUND\n" 2> /dev/null;
done
Contoh dengan daftar file dalam /etc/
, mencari passwd, grup, fstab, dan THISDOESNTEXIST nama file.
$ 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
Karena Anda telah menyebutkan direktori itu datar, Anda bisa menggunakan -printf "%f\n"
opsi untuk hanya mencetak nama file itu sendiri
Apa yang tidak dilakukan adalah mendaftar file yang hilang. find
Kerugian kecilnya adalah ia tidak memberi tahu Anda jika tidak menemukan file, hanya ketika itu cocok dengan sesuatu. Apa yang bisa dilakukan seseorang adalah mengecek output - jika output kosong, maka kita memiliki file yang hilang
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
Lebih mudah dibaca:
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
Dan inilah cara kerjanya sebagai skrip kecil:
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
Satu dapat digunakan stat
sebagai alternatif, karena itu adalah direktori datar, tetapi kode di bawah ini tidak akan bekerja secara rekursif untuk subdirektori jika Anda memutuskan untuk menambahkannya:
$ 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
Jika kita mengambil stat
ide dan menjalankannya, kita bisa menggunakan kode keluar stat sebagai indikasi apakah ada file atau tidak. Secara efektif, kami ingin melakukan ini:
$ 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
Contoh dijalankan:
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