Bash einzeiler

Post Reply
Message
Author
Jens

Bash einzeiler

#1 Post by Jens »

Hi,

Ich versuche gerade einen Einzeiler zusammenzubasteln der mir aus z.B.
*local.gz *local macht
andersrum würde ich das so machen:

ls *local | xargs -i -t mv {} {}.gz

aber das gz wieder weg??

Descartes

Re: Bash einzeiler

#2 Post by Descartes »

Wie wäre es mit folgendem Aufruf mit SED ?
Allerdings läuft die foreach-Schleife auf einen Fehler wenn `ls -1 *local.gz` keine Datei findet;
In einem Shellscript könnte man das noch ausbauen und diesen Fehler abfangen aber du wolltest ja einen Einzeiler <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
Bash:
for GZFILE in `ls -1 *local.gz`; do FILE=`echo ${GZFILE} | sed "s/\.gz//g"`; echo "mv ${GZFILE} ${FILE} ";done
</font><hr></pre></blockquote>

Descartes

Re: Bash einzeiler

#3 Post by Descartes »

Anmerkung zu dem einzeiler oben:

Hier noch einmal ein bisschen eingerückt (damit wird es ein bisschen klarer was eingentlich gemacht wird)

Es wird sicherheitshalber *keine* Datei umbenannt sondern nur mit echo der Befehl ausgegeben.


<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
Bash:
#----- diese Version gibt mit echo nur den Befehl aus der aufgerufen würde -----
for GZFILE in `ls -1 *local.gz`
do
FILE=`echo ${GZFILE} | sed "s/\.gz//g"`
echo "mv ${GZFILE} ${FILE} "
done

#----- diese Version benennt wirklich um -----
for GZFILE in `ls -1 *local.gz`
do
FILE=`echo ${GZFILE} | sed "s/\.gz//g"`
mv ${GZFILE} ${FILE}
done
</font><hr></pre></blockquote>

Jochen

Re: Bash einzeiler

#4 Post by Jochen »

Eins würde mich ja wirklich sehr interessieren: Warum macht Ihr Euch immer solche Mühe, dem sed (oder auch awk) die Zeilen immer einzeln vorzufüttern?

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
ls -1 *local.gz 2>/dev/null | sed 's/\(.*\)\.gz/mv & \1/' | sh -e -s
</font><hr></pre></blockquote>
ls listet die gewünschten Dateien auf, Fehlermeldung wg. nicht vorhandenen Dateien diesen Typs werden unterdrückt. sed ersetzt den Dateinamen durch mv, sich selbst (&) und den Inhalt des Subausdrucks (\<!--no-->1). Damit erhält man eine ganze Liste von mv-Kommandos ausgegeben. Die shell nimmt sie hin und führt sie aus, bei Fehlermeldung eines mv-Kommandos bricht sie ab.

Und die Moral von der Geschicht: Programmiere Schleifen nicht! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Jochen

Jens

Re: Bash einzeiler

#5 Post by Jens »

Hey Danke,

So wie ichs mir wünsche <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Post Reply