我有一个类似的文件名 filename.txt.zip_20180202_30291_233
在脚本变量中,我将在变量中包含文件名,在变量中包含扩展名 喜欢
for /d %%a in (*) do set /a count+=1
如何将文件重命名为一个?将扩展后的所有内容移至扩展前? (注意:扩展后可能有任何数字)
filename_20180202_30291_233.txt.zip
答案 0 :(得分:1)
#!/bin/sh
prefix='filename'
suffix='.txt.zip'
name='filename.txt.zip_20180202_30291_233'
newname="$prefix${name#$prefix$suffix}$suffix"
echo mv "$name" "$newname"
这将输出
mv filename.txt.zip_20180202_30291_233 filename_20180202_30291_233.txt.zip
参数替换${name#$prefix$suffix}
从$prefix$suffix
的开头移除filename.txt.zip
,即$name
,它会为您提供_20180202_30291_233
。然后将其添加到$prefix
前面并附加$suffix
以创建$newname
。
循环覆盖当前目录中与"$prefix$suffix"*
匹配的所有文件并重命名全部:
for name in "$prefix$suffix"*; do
newname="$prefix${name#$prefix$suffix}$suffix"
echo mv "$name" "$newname"
done
echo
是为了保护。一旦你确定代码会做正确的事情就删除它。
答案 1 :(得分:0)
file_orig=filename.txt.zip_20180202_30291_233
fileprefix=filename
filesuffix=.txt.zip
file="${file_orig#$fileprefix}"
file="${file#$filesuffix}"
file="$fileprefix$file$filesuffix"
echo "$file"
filename_20180202_30291_233.txt.zip
https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion