bash如果条件为循环

时间:2017-04-28 09:59:15

标签: bash filenames md5sum

您好我想创建一个bash文件,我在其中定义多个文件(未设置数字),脚本检查是否存在每个文件的md5哈希,如果不存在则创建一个? 我坚持使用if循环,如何将具有可变长度的循环定义为if条件?

COMPARE_FILES=("/folder/file1" "/folder2/file2" "file3" ... "/folderN/fileN")

for i in "${COMPARE_FILES[@]}"
do

    base=${i%%.*}                # does not work?
    file=${##*/}                 # works as expected

    if [ ! -f $COMPARE_DIR/compare/$base.md5 ]; then

        rsync $COMPARE_LOC/"$i" $COMPARE_DIR/compare/       #works as expected
        md5sum $COMPARE_LOC/$file > $COMPARE_DIR/$base.md5
        rm $COMPARE_DIR/compare/$file                        #does not work

    fi
done

我无法从循环中的数组中提取文件名和基本名称,有人可能会帮助我吗?

1 个答案:

答案 0 :(得分:0)

要从文件路径获取基本名称,请使用basename

$ i="/file/path/filename.ext"
$ base=$(basename $i)
$ echo $base
filename.ext

然后您可以像以前一样获取没有扩展名的文件名:

$ fnam=${base%.*}
$ echo $fnam
filename

或者扩展名:

$ extn=${base#*.}
$ echo $extn
ext