2016-04-25 7 views
0

Ich möchte (innerhalb Bash) eine Liste von Dateien, die mit einer bestimmten Zeichenfolge 'foo' beginnen, mit einer zufälligen Zeichenfolge der nicht angegebenen Länge 'random1' fortsetzen und mit einer anderen bekannten weiter Zeichenfolge 'bar'. Im Wesentlichen von 'foo_random1_bar_random2' möchte ich 'foo_bar_random2'. Ich weiß, wie man bestimmte Zeichenfolgen mit sed entfernt, aber keine Zeichenfolgen unbekannter Länge zwischen bestimmten Zeichenfolgen.Bash Umbenennen von Dateien Entfernen zufälliger Zeichenfolge zwischen bestimmten Zeichenfolgen

Antwort

2
for i in foo_*_bar_* 
do 
    j=$(echo "$i"|sed -e 's/foo_.*_bar_\(.*\)/foo_bar_\1/') 
    echo mv "$i" "$j" 
done 

Dies zeigt eine Liste von mv Befehle. Sobald Sie mit den Befehlen zufrieden sind, entfernen Sie die echo vor mv, damit sie ausgeführt werden.

1

Mit BASH string Ersatz:

f='foo_random1_bar_random2' 
echo "${f/*bar/foo_bar}" 

PS: Wie pro Kommentar unten, wenn es vor bar unterstreichen ist dann besser zu nutzen:

echo "${f/*_bar/foo_bar}" 

Ausgang:

foo_bar_random2 

Verwenden Sie mv als:

for f in foo_*bar_*; do 
    mv -i "$f" "${f/*_bar/foo_bar}" 
done 
+0

dies auf foo_random1_bar_randombar2 – mvds

+0

bricht Ich sehe nicht, dass in dem Beispiel OP vorgesehen. Ich werde es anpassen, wenn es eine Möglichkeit wie diese gibt. – anubhava

+0

"Zufällig" scheint ziemlich breite Eingabe für mich ;-) – mvds

1

Wenn Sie das Tool installiert rename Sie können dies tun,

rename 's/foo_.*_bar/foo_bar/' files 
Verwandte Themen