for name in /hw1/textarchive/*.pro; do
newname=${name%.pro}.txt
echo mv "$name" "$newname"
done
或更短,
for name in /hw1/textarchive/*.pro; do
echo mv "$name" "${name%.pro}.txt"
done
(当你确定正在做正确的事情时,删除回声)
这将遍历/ hw1 / textarchive下的所有.pro文件,并将它们重命名为.txt文件. ${name%.pro}替换将从$name中的名称末尾删除.pro扩展名.
如果要重命名所有文件:
for name in /hw1/textarchive/*; do
echo mv "$name" "${name%.*}.txt"
done
${name%.*}将删除名称末尾的任何扩展名.现有的.txt文件也将被处理,但不会更改其名称.没有扩展名的文件将获得新的.txt扩展名.这也将获取非文件的名称(如目录),因此以下更改将跳过这些:
for name in /hw1/textarchive/*; do
test -f "$name" || continue
echo mv "$name" "${name%.*}.txt"
done
谨慎的做法是确保不存在具有新名称的目录条目:
for name in /hw1/textarchive/*; do
test -f "$name" || continue
test -e "${name%.*}.txt" && continue
echo mv "$name" "${name%.*}.txt"
done
在另一个等效形式:
for name in /hw1/textarchive/*; do
if [ -f "$name" ] && [ ! -e "${name%.*}.txt" ]; then
echo mv "$name" "${name%.*}.txt"
fi
done
-f test测试给定常规文件的存在. -e测试测试给定名称的存在(无论它的名称是什么).
此解决方案不需要bash(只是sh兼容的shell).