更改文件名

时间:2016-11-28 18:06:16

标签: regex bash sed

我需要一些帮助来重命名我正在使用bash的大量文件 非常切割_Filestore以及在key和crt之后结束的所有内容 文件。谢谢你的帮助

当前档案

_Filestore.dev.orange.key_12345_1

_Filestore.dev.orange.crt_57397_1

_Filestore.dev.apple.key_95672566_1

_Filestore.dev.apple.crt_22258_1

需要它看起来像这样

dev.orange.key

dev.orange.crt

dev.apple.key

dev.apple.crt

3 个答案:

答案 0 :(得分:1)

使用简单的直接for循环。使用regEx中的bash=~运算符(从bash 3.0开始支持)来提取文件重命名所需的子字符串。您可以直接在命令行上运行它。

for file in _Filestore*
do 
    [[ $file =~ ^_Filestore.(.*)_([[:digit:]]+)_([[:digit:]])$ ]] && subString="${BASH_REMATCH[1]}"
    mv -v "$file" "$subString"
done

答案 1 :(得分:-1)

试试这个:

# file.txt
_Filestore.dev.orange.key_12345_1
_Filestore.dev.orange.crt_57397_1
_Filestore.dev.apple.key_95672566_1
_Filestore.dev.apple.crt_22258_1

cat file.txt | sed&#39> s / Filestore .// g' | sed' s / key / key / g' | sed' s / crt _。 / crt / g' > FILE2.TXT

# file2.txt
dev.orange.key
dev.orange.crt
dev.apple.key
dev.apple.crt

答案 2 :(得分:-1)

#!/bin/bash
for filename in `ls`; do
    echo "the next file is $filename"
    mv $filename `echo $filename | grep -oE "dev.*\...."`
done

获取所有文件,然后使用regexgrep重新命名。