• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] einfaches bashscript vertauscht text und variable

Emanuele

Member
Also ich will aus einer Liste alter Logos alle in einen "alt"-Ordner verschieben.
Jedoch meldet er immer Datei nicht gefunden.
Wenn ich ein echo $i schreibe, dann werden alle Dateinamen ausgegeben. Allerdings fehlt in meiner Liste die Endung.
Füge ich nun ein ls davor ein und die Endung am Ende dreht es die ausgabe um es steht erst die Endung .0.Lo und direkt hinten dran der Dateiname

Code:
#! /bin/bash

DATEI=`cat usa_logoliste_alt.txt`

for i in $DATEI
do
	echo "ls ${i}.0.Lo"

#	"mv \*${i}.0.Lo /tmp/emd_logos_alt/"
done

Dementsprechend geht auch das mv nicht. Dabei ist noch etwas zu beachten ich möchte die führenden Nullen mit dem Stern abfangen die fehlen nämlich auch in der Liste.
Ist das ein Problem als Befehl *$i zu verwenden? Wenn ja, wie sonst kann ich die führenden Zeichen mit der Variablen abfangen?
 

spoensche

Moderator
Teammitglied
In der Datei ...txt stehen die Namen, der eigentliche Dateiname ist aber z.B. 00logo.0.Lo. Hab ich das richtig verstanden?

Dein
Code:
echo "ls ${i}.0.Lo"
erzeugt die Ausgabe ls dateiname.0.Lo. Warum setzt du den mv Befehl in Anführungszeichen?

Am einfachsten wäre es, wenn du mit dem Befehl "find" (gibt dir den vollständigen Dateinamen aus) arbeitest und dann den Befehl mv anwendest. Siehe
Code:
man find
 

oc2pus

Ultimate Guru
oder ohne script und dann mit dem Programm "metamorphose"

http://file-folder-ren.sourceforge.net/
A cross platform file and folder mass renamer, allows many different renaming operations in a GUI. Features include search and replace (with RE), insert, numbering, date/time, id3 & EXIF tag read, change length, get all files in sub-dirs, undo/redo etc.

Pakete hier:
http://packman.links2linux.de/package/metamorphose2
http://packman.links2linux.de/package/metamorphose
 
OP
E

Emanuele

Member
spoensche schrieb:
In der Datei ...txt stehen die Namen, der eigentliche Dateiname ist aber z.B. 00logo.0.Lo. Hab ich das richtig verstanden?
Korrekt!

spoensche schrieb:
Dein
Code:
echo "ls ${i}.0.Lo"
erzeugt die Ausgabe ls dateiname.0.Lo. Warum setzt du den mv Befehl in Anführungszeichen?

Nein, dieser code verursacht das ich .0.LoDateiname auf dem Bildschirm erzeuge!

Mit find habe ich das gleiche Proble ich gebe ja dann den code
Code:
find -name $i.0.Lo
ein und er sucht nach .0.LoDateiname und findet deswegen nix.

oc2pus schrieb:
oder ohne script und dann mit dem Programm "metamorphose"

http://file-folder-ren.sourceforge.net/
A cross platform file and folder mass renamer, allows many different renaming operations in a GUI. Features include search and replace (with RE), insert, numbering, date/time, id3 & EXIF tag read, change length, get all files in sub-dirs, undo/redo etc.

Pakete hier:
http://packman.links2linux.de/package/metamorphose2
http://packman.links2linux.de/package/metamorphose
Das kann ich nicht verwenden da ich zum ersten auf einem entfernten Server die Arbeit durchführe und zum anderen kein xserver läuft und ich da keine Möglichkeit sehe aus der Textdatei die Dateinamen zu ziehen. Außerdem will ich die gefundenen Dateien in einen bkp-Ordner verschieben.
 
A

Anonymous

Gast
Ich vermute mal deine Datei in der die Filenamen stehen ist nicht auf Linux erzeugt oder nicht zuletzt dort bearbeitet worden und hat Doszeilensprünge.
Dadurch werden deine Ausgabenzeilen bei ls wohl so verstümmelt. Bei mv steht dann wahrscheinlich ein Sonderzeichen "0x0A" im Dateinamen, und damit sind natürlich keine Dateien zu finden.
Umwandeln der Datei auf Unix-Format sollte das Problem beheben.

robi
 
Oben