检查 ksh 中的文件名时出现文件权限错误

检查 ksh 中的文件名时出现文件权限错误

我正在尝试创建一个校验和文件。该文件将包含工作目录中的文件列表,为每个文件创建 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

由于某种原因, if 行给了我"Permission Denied"错误,尽管事实上它是创建该文件的同一用户。我怀疑这$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的内容。]

相关内容