1650개 사이트 위치 목록이 포함된 텍스트 파일을 여는 스크립트가 있습니다. 나는 이 목록을 반복하면서 두 개의 개별 파일 목록, 즉 1) 발견된 파일 목록과 2) 누락된 파일 목록을 인쇄하려고 합니다. 사이트 위치 목록은 하나의 열입니다. 내가 겪고 있는 문제는 스크립트가 입력 파일을 읽지 않고 반복하지 않는다는 것입니다. 스크립트는 "해당 파일의 각 줄을 읽고 반복하는 대신" 단일 파일을 찾습니다.
#!/bin/bash
file=Sites-1.txt
do
if "$file" ;
then
echo "$file found" >> found.tmp
else
echo "$file has not been found" >> missing.tmp
fi
done
파일을 찾기 위한 Sites-1.txt의 입력 예
01-033-0043-SO2-2014.dat.out
01-033-0044-SO2-2014.dat.out
01-033-1002-SO2-2014.dat.out
01-071-0020-SO2-2014.dat.out
01-071-0026-SO2-2014.dat.out
예상되는 출력 파일 구성
found.tmp
01-033-0043-SO2-2014.dat.out found
01-033-0044-SO2-2014.dat.out found
01-071-0026-SO2-2014.dat.out found
missing.tmp
01-033-1002-SO2-2014.dat.out has not been found
01-071-0020-SO2-2014.dat.out has not been found
답변1
Sites-1.txt
각 줄에 파일 이름이 포함되어 있고 현재 디렉터리의 파일 이름에 개행 문자가 포함되어 있지 않은 경우 다음을 수행할 수 있습니다.
comm -23 <(sort -u Sites-1.txt) <(ls -A)
보고된 출력에 u
특수 줄의 유무 .Sites-1.txt
ls -A
또는 다음을 사용하여 zsh
:
expected=( ${(f)"$(<Sites-1.txt)"} )
actual=( *(ND) )
missing=( ${expected:|actual} )
print -rC1 -- $missing
답변2
귀하의 스크립트는 유용한 것을 확인하지 않습니다. if "$file"
파일이 존재하는지 확인하지 않으므로 해당 파일을 사용해야 합니다 -e "$file"
. 그러나 여전히 목록이 존재하는지 확인하면 됩니다.
다음과 같은 스크립트를 찾고 있을 수 있습니다.
#!/bin/bash
filelist=sites-1.txt
for file in $(cat $filelist); do
if [ -e "$file" ]
then
echo "$file found" >> found.tmp
else
echo "$file has not been found" >> missing.tmp
fi
done