View previous topic :: View next topic |
Author |
Message |
Martux Veteran
Joined: 04 Feb 2005 Posts: 1917
|
Posted: Tue Mar 25, 2008 1:59 pm Post subject: Bash-Script - Hilfe... |
|
|
Hallo! Das hat zwar gar nix mit Gentoo zu tun, aber ich weiß nicht wo ich sonst fragen könnte. Also:
Ich möchte viele, viele Wav-Dateien in zig Unterordnern mittels wavpack komprimieren und danach die Waves löschen. Hierzu bräuchte ich ein bashscript, was die Unterordner rekursiv durchackert.
Könnt ihr helfen? _________________ "Coincidence is God's way of remaining anonymous."
Albert Einstein
"The road to success is always under construction" |
|
Back to top |
|
|
Anarcho Advocate
Joined: 06 Jun 2004 Posts: 2970 Location: Germany
|
Posted: Tue Mar 25, 2008 2:05 pm Post subject: |
|
|
Ich habe leider gerade kein Linux zur Hand, daher mal grob aus dem Kopf:
Code: | for I in $(find /base/dir -type d); do
cd "$I"
for J in *.wav; do
# do the work with $J here
done
done |
Alternativ kannst du aber auch
Code: | for I in $(find /base/dir -name '*.wav'); do
DIR=$(dirname "$I")
FILE=$(basename "$I")
# do the work with $DIR and $FILE or $I
done |
verwenden.
Wie gesagt, gerade aus dem Kopf herraus getippt. Einfach mal probiern. Bei #do the work kannst du ja einfach echo $J, bzw. echo $DIR, $FILE verwenden.
EDIT:
Endlich wieder an einer Linux-Kiste!
Die beiden Varianten hatten Probleme mit Leerzeichen in den Datei- oder Verzeichnisnamen. Hiermit sollte es nun entgültig klappen:
Code: | #!/bin/sh
find /daten/small/Audio -name '*.wav' -print | while read I; do
DIR=$(dirname "$I")
FILE=$(basename "$I")
# do the work with $DIR and $FILE
echo "$FILE" in "$DIR"
done |
_________________ ...it's only Rock'n'Roll, but I like it! |
|
Back to top |
|
|
Martux Veteran
Joined: 04 Feb 2005 Posts: 1917
|
Posted: Tue Mar 25, 2008 6:46 pm Post subject: |
|
|
Hmm, also wenn ich jetzt
Code: |
#!/bin/sh
find /home/martux/Neu -name '*.wav' -print | while read I; do
DIR=$(dirname "$I")
FILE=$(basename "$I")
# do the work with $DIR and $FILE
wavpack -d "$FILE" in "$DIR"
done
|
mache, bekomme ich folgende Fehlermeldungen:
Code: |
WAVPACK Hybrid Lossless Audio Compressor Linux Version 4.41.0
Copyright (c) 1998 - 2007 Conifer Software. All Rights Reserved.
SHAKER 3H.wav:
can't open file SHAKER 3H.wav!
in.wav:
can't open file in.wav!
/home/martux/Neu/AFRICAN DRUMS.wav:
can't open file /home/martux/Neu/AFRICAN DRUMS.wav!
**** warning: errors occurred in 3 of 3 files! ****
|
Sehe ich das richtig und er kommt nicht in die jeweiligen weiteren Unterverzeichnisse? _________________ "Coincidence is God's way of remaining anonymous."
Albert Einstein
"The road to success is always under construction" |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Tue Mar 25, 2008 7:54 pm Post subject: |
|
|
Martux wrote: | Sehe ich das richtig und er kommt nicht in die jeweiligen weiteren Unterverzeichnisse? |
Das Problem sind eher deine Filenamen weil die Leerzeichen enthalten. Entsprechend kapseln dann sollte das funktionieren. _________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
Anarcho Advocate
Joined: 06 Jun 2004 Posts: 2970 Location: Germany
|
Posted: Tue Mar 25, 2008 8:04 pm Post subject: |
|
|
Du rufst wavpack auch völlig falsch auf. Mein Beispiel war nur eine reine Auflistung der Dateien mit den jeweiligen Ordnern.
Wie würdest du denn normalerweise wavpack aufrufen?
Bei mir steht in der Variable $FILE der Dateiname und in der Variable $DIR das Verzeichnis. In $I steht der ganze Pfad der Datei, inklusive des Ordners.
Zum Beispiel:
$I = /home/maz/audio/iced_earth/phantom_of_the_opera.wav
$FILE = phantom_of_the_opera.wav
$DIR = home/maz/audio/iced_earth
Was du also gerade aufrufst ist zum Beispiel:
wavpack -d datei.wav in /dir/der/datei
Das kann natürlich nicht funktionieren.
Aber wenn ich es richtig verstehe willst du einfach "wavpack -d /ordner/datei.wav" aufrufen.
Das geht dann natürlich einfacher mit
Code: | find /dir -name '*.wav' -exec wavpack -d {} \; |
Ich würde das allerdings vorher an einem harmlosen Ordner testen, da ich wavpack nicht kenne. _________________ ...it's only Rock'n'Roll, but I like it! |
|
Back to top |
|
|
Martux Veteran
Joined: 04 Feb 2005 Posts: 1917
|
Posted: Tue Mar 25, 2008 9:29 pm Post subject: |
|
|
Code: |
find /dir -name '*.wav' -exec wavpack -d {} \;
|
Getestet, funktioniert Danke Anarcho!
Ja, wavpack ist ein verlustfreies Format, wenn man die Dateien (in meinem Falle Audio-Samples) zurück nach wav konvertiert, hat man die Original-Datei wieder. Genial um ein backup platzsparend zu archivieren.
Vielen Dank nochmal,
Gruß Marcus _________________ "Coincidence is God's way of remaining anonymous."
Albert Einstein
"The road to success is always under construction" |
|
Back to top |
|
|
|