2016-11-28 117 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重新命名。