如何在扩展unix之后获取所有内容

时间:2018-05-10 12:14:45

标签: unix awk sed

我有一个类似的文件名 filename.txt.zip_20180202_30291_233

在脚本变量中,我将在变量中包含文件名,在变量中包含扩展名 喜欢

for /d %%a in (*) do set /a count+=1

如何将文件重命名为一个?将扩展后的所有内容移至扩展前? (注意:扩展后可能有任何数字)

filename_20180202_30291_233.txt.zip

2 个答案:

答案 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