我正在运行此代码,用于对所需文件夹中的文件进行排序。如果文件名有13个字符,它应该运行第一个语句,否则运行第二个语句。
for i in *.png; do if [ "$($i | wc -c)" -eq 13 ]; then
echo cp $i $HOME/Desktop/final/pos_${i:0:1}/${i:0:3}.jpg
else
echo cp $i $HOME/Desktop/final/pos_${i:0:1}/${i:0:4}.jpg
fi;
done
问题是,[ "$($i | wc -c)" -eq 13 ]
始终为0,但很明显,文件名有一定的长度。在if语句中评估wc -c
的正确方法是什么?
答案 0 :(得分:2)
替换
[ "$($i | wc -c)" -eq 13 ]
通过
[ $(printf "%s" "$i" | wc -c) -eq 13 ]
或使用
[ ${#i} -eq 13 ]
答案 1 :(得分:2)
使用bash
字符串实用程序获取字符串长度。您根本不需要wc
。 在脚本中双引号所有变量,以避免shell完成分词。
for i in *.png; do
if ((${#i} == 13)); then
echo cp "$i" $HOME/Desktop/final/pos_"${i:0:1}"/"${i:0:3}".jpg
else
echo cp "$i" $HOME/Desktop/final/pos_"${i:0:1}"/"${i:0:4}".jpg
fi
done