使用带文件名的 wc -c 时出错
error when using wc -c with file names
我正在 运行ning 这段代码,它将文件排序到所需的文件夹中。如果一个文件名有 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
的正确方法是什么?
替换
[ "$($i | wc -c)" -eq 13 ]
来自
[ $(printf "%s" "$i" | wc -c) -eq 13 ]
或使用
[ ${#i} -eq 13 ]
使用 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
我正在 运行ning 这段代码,它将文件排序到所需的文件夹中。如果一个文件名有 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
的正确方法是什么?
替换
[ "$($i | wc -c)" -eq 13 ]
来自
[ $(printf "%s" "$i" | wc -c) -eq 13 ]
或使用
[ ${#i} -eq 13 ]
使用 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