내가 접근하는 방법은 먼저 파일에서 uuid를 가져온 다음 사용하는 것입니다. 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, group, 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아이디어 를 가져 와서 실행하면 stat의 종료 코드를 파일의 존재 여부에 대한 표시로 사용할 수 있습니다. 효과적으로, 우리는 이것을하고 싶습니다 :
$ 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