2016-11-28 94 views
-3

我需要一些帮助来重命名大量的文件我正在使用bash 漂亮的_Filestore以及在 文件中的关键字和crt后结束的所有内容。 THX的帮助更改文件名


当前文件

_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

回答

1

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

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

Thx为您提供帮助这个非常简单的工作只是试图了解它是如何工作的 – Vegeta

+0

@Vegeta:您可以从http://tldp.org/LDP/Bash-Beginners-Guide/阅读关于'bash'中的'regEx'的内容。 HTML/chap_04.html – Inian

-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'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 
-1
#!/bin/bash 
for filename in `ls`; do 
    echo "the next file is $filename" 
    mv $filename `echo $filename | grep -oE "dev.*\...."` 
done 

获取的所有文件,并使用regexgrep重新命名。