Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Bash einzeiler

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jens
Gast





BeitragVerfasst am: 30. Jul 2001 16:36   Titel: Bash einzeiler

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
Gast





BeitragVerfasst am: 30. Jul 2001 17:19   Titel: Re: Bash einzeiler

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

code:

Bash:
for GZFILE in `ls -1 *local.gz`; do FILE=`echo ${GZFILE} | sed "s/\.gz//g"`; echo "mv ${GZFILE} ${FILE} ";done

 

Descartes
Gast





BeitragVerfasst am: 30. Jul 2001 17:22   Titel: Re: Bash einzeiler

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.


code:

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

 

Jochen
Gast





BeitragVerfasst am: 31. Jul 2001 8:47   Titel: Re: Bash einzeiler

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?

code:

ls -1 *local.gz 2>/dev/null | sed 's/\(.*\)\.gz/mv & \1/' | sh -e -s


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 (\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!

Jochen
 

Jens
Gast





BeitragVerfasst am: 31. Jul 2001 22:32   Titel: Re: Bash einzeiler

Hey Danke,

So wie ichs mir wünsche
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy