チェックサムファイルを作成しようとしています。このファイルには、作業ディレクトリのファイルのリストが含まれており、各ファイルの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
セミコロンの前にある可能性のある項目を削除する必要がある項目。]