체크섬 파일을 만들려고 합니다. 이 파일은 작업 디렉터리의 파일 목록을 포함하고, 각 파일에 대한 cksum을 생성하며, 파일과 함께 cksum이 MD5_<>.txt인 파일 목록을 삭제합니다.
내 코드는 다음과 같습니다.
EXT=`date +%Y%m%d`
p_FP=${gp_LOAD_DIR}Client/
cd ${p_FP}
###################################################
# Create MD5_<<Process Date>>.txt File
###################################################
echo "MD5 CHECKSUM Roster for " ${EXT} > MD5_${EXT}.txt
echo "MD5 File Size FileName" >> MD5_${EXT}.txt
for file in $p_FP*; do
if $file != MD5_${EXT}.txt]; then
echo cksum file >> MD5_${EXT}.txt
fi
done
"Permission Denied"
파일을 생성한 사용자가 동일하다는 사실에도 불구하고 어떤 이유에서인지 if 행에서 오류가 발생합니다 . 나는 이것이 $file
파일의 텍스트 이름이 아닌 객체라고 생각합니다. 이 문제를 어떻게 해결할 수 있습니까?
답변1
재미삼아, 결과 파일을 더 쉽게 읽을 수 있도록 몇 가지 형식을 지정하는 등 제가 할 작업은 다음과 같습니다.
#!/bin/ksh
# This is just for formatting
typeset -L15 Col1
typeset -L15 Col2
typeset -L50 Col3
# Shouldn't use backtick, it's more or less deprecated by now
EXT=$(date +"%Y%m%d")
p_FP=${gp_LOAD_DIR}Client/
cd ${p_FP}
###################################################
# Create MD5_<<Process Date>>.txt File
###################################################
# Just for speed. Since you are already using cksum for each line, it could be faster to avoid reopening the result file each time also
exec 3>MD5_${EXT}.txt
# Using ksh, you should use "print" instead of echo since it's builtin instead of external (faster)
print -u 3 "MD5 CHECKSUM Roster for " ${EXT}
Col1="MD5"
Col2="File Size"
Col3="FileName"
print -u 3 "$Col1$Col2$Col3"
for file in $p_FP*; do
# cksum won't work on directories nor on names pipe
if [[ -f $file && ! -p $file && $file != MD5_${EXT}.txt ]]; then
# Again, that's just for formatting
line=( $(cksum $file) )
Col1=${line[0]}
Col2=${line[1]}
Col3=${line[2]}
print -u 3 "$Col1$Col2$Col3"
fi
done
# Closing the file
exec 3>&-
답변2
$file
인수를 사용하여 프로그램을 호출하고 있습니다 !=
.MD5_${EXT}.txt]
따라서 가장 가능성 있는 이유는 $file
실행 가능하지 않기 때문입니다(x 비트가 설정되지 않음).
당신이 좋아한다면시험세미콜론 앞에 추가해야 할 항목 $file
과 test
세미콜론 앞에 있을 수 있는 항목을 제거해야 하는 항목입니다.]