Problem Verständnis piping bash

N

NewbiePete

Grünschnabel
Hallo Forum,

ich bin Anfänger, was das programmieren mit der Shell (bash) angeht.

Ich möchte eigentlich nur ein kleines Problem lösen, aber es klappt nicht so wie ich es möchte.
Folgendes Problem, ich habe einen Datenträger (bsw. CD) und auf diesem Datenträger sind nur wavefiles drauf (filename bsw. 1.wav, 2.wav usw). Nun möchte ich diese *.wav files auf meine Festplatte bekommen in ein bestimmtes Verzeichnis und sie dabei gleich umbenennen in 1.WAV, 2.WAV usw. Leider habe ich dieses nicht hinbekommen.

Folgenden Lösungsansatz hatte ich probiert :

cd /mnt/hdc
ls > /home/Peter/test.txt

less /home/Peter/test.txt

1.wav
2.wav
3.wav
4.wav
5.wav

So, nun dachte ich, ich kann mittels cp < test.txt *.WAV dieses Problem lösen. Leider sagt er mir darauf hin :

cp: Fehlende Zieldatei
„cp --help“ gibt weitere Informationen.

habe ich das mit dem Piping nun falsch verstanden oder was ist falsch ??? Ich habe das so verstanden, das er jetzt das *.txt file ausliest (wo ja die Quelldateinamen drinstehen) und jeden Namen durch *.WAV ersetzt.

Könnte mir da bitte jemand die Augen öffnen :-)

Danke

Gruß

Peter
 
Ich verstehe nicht so ganz was du wirklich vor hast. Aber ich würde das über Kommandosubstitution lösen wenn ich ansatzweise verstehe was das soll.

Also irgend so ein 'cp $(cat test.txt) *.wav' Konstrukt. Allerdings schwer zu sagen da ich es wirklich nicht ganz verstehe.
 
Hallo
Also wenn du die Dateien nur mit Zahlen + der Endung .wav umbenennen
willst, kannst du dir den Weg über eine Datei sparen.
Ich bin mir aber nicht sicher, ob das das ist was du wirklich willst.

eine Lösung für og. Fall wäre:
export z=0;for i in $( find /pfad/cd/ -iname "*wav");
do mv $i "/Zielpfad/$z.${i##*\.}";
z=$((z++));
done

Hier landet aber alles in einem Verzeichnis...
GNU find und bash vorausgesetzt.

Gute Infos zur Parameterexpansion
Da kannst du dann auch einzelne Pfade ersetzen oder wie du es willst.
Obiges funktioniert aber nicht, wenn irgendwelche hässliche Sonderzeichen im Dateinamen sind.
Dann müsstest du mit der find-Option -print0 und xargs -0 arbeiten .

HTH
Gruß Wolfgang
 
Hallo,

kann sein, das ich mich falsch ausgedrückt habe. Ich versuche es nochmal und hole etwas weiter aus.

In der Firma steht ein IndustriePC, welcher für unsere automatischen Durchsagen (Maschinenstörungen) zuständig ist. Dieser PC erwartet die Wavefiles auf einer Datencd, auf dieser sind die Wavefiles mit Nummern abgelegt z.B. 1.WAV, 2.WAV usw.
Das Problem ist jetzt, das es vorkommen kann, das die Dateiendung (*.WAV) großgeschrieben ist, aber der PC möchte diese aber kleingeschrieben haben, sonst erkennt er diese nicht. Diese Files werden automatisch mittels einem Programm der Fremdfirma auf den Linusrechner kopiert ( automatisch nach einlegen einer CD ). Das macht er auch einwandfrei, dummerweise kopiert er die Files mit der Endung *.WAV auch als *.WAV auf die Platte ( statt *.wav ) und somit fehlen uns ein paar Durchsagen, was nicht unbedingt gut ist. Nun dachte ich, ich mache das kopieren mit einem eigenen Script, und benenne diese Files gleich alle so um wie ich sie brauche ...

Hoffe ich habe mich jetzt richtig ausgedrückt ...

Gruß

Peter
 
for i in *.WAV; do mv "$i" "${i%WAV}wav"; done

auf bald
oenone
 

Ähnliche Themen

Keine grafische Oberfläche (Debian Installation)

ip6tables Problem

bash esac problem

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Zeile für Zeile auslesen und Befehl ausführen

Zurück
Oben