2016-11-28 2 views
-3

Ich brauche Hilfe beim Umbenennen einer großen Menge von Dateien, die ich Bash ziemlich schneiden _Filestore und alles, was nach Schlüssel und CRT in Dateien. Thx für Ihre HilfeÄnderung Dateiname


Aktuelle Datei

_Filestore.dev.orange.key_12345_1

_Filestore.dev.orange.crt_57397_1

_Filestore.dev.apple.key_95672566_1

_Filestore.dev.apple.crt_22258_1

Du möchtest wie diese

dev.orange.key

dev.orange.crt

dev.apple.key

dev.apple.crt

Antwort

1

eine einfache geradlinige for-Schleife. Verwenden Sie regEx in bash mit dem Operator =~ (unterstützt von bash 3.0 ab), um den Teilstring zu extrahieren, der für die Umbenennung der Datei benötigt wird. Sie können dies direkt in der Befehlszeile ausführen.

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

Thx für Ihre Hilfe dieses hübsche Muched arbeitete nur versuchen zu verstehen, wie es funktioniert – Vegeta

+0

@Vegeta: Sie können über 'regEx' in' bash' von http://tldp.org/LDP/Bash-Beginners-Guide/ lesen html/chap_04.html – Inian

-1

aussehen versuchen Sie dies:

# 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/Dateispeicher.//g' | sed 's/Schlüssel. /Schlüssel/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 

Erhalten Sie alle Dateien und benennen Sie sie regex und grep verwenden.