bash-script: setsamer Zeilenumbruch bei find

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
schdefan
Beiträge: 39
Registriert: 01.05.2004 19:41:59
Wohnort: wien

bash-script: setsamer Zeilenumbruch bei find

Beitrag von schdefan » 20.08.2004 20:13:20

Mit meinem kleinen Skript kann ich nun überprüfen ob eine CD im Laufwerk liegt. Wenn das der Fall sein sollte, werden alle mp3 Dateien in das Verzeichnis /music/ kopiert werden.

Code: Alles auswählen

#!/bin/bash
# file: cdrom_update.sh

DIR=/music/
CD=`cd /mnt/cdrom && grep -c /mnt/auto/cdrom /proc/mounts`
clear
echo "MOUNTING CDROM"

if [ 1 -eq "$CD" ] ; then
  echo "START COPYING MP3 FILES"
  for file in `find /mnt/cdrom/ -type f -name "*.mp3"`
    do
          echo -n $file
        cp -Rf $file $DIR
   done
fi
echo " END COPYING MP3 FILES"

ls -la $DIR
echo "KICK OUT CDROM"
eject


Führe ich

Code: Alles auswählen

find /mnt/cdrom/ -type f -name "*.mp3"
in der Konsole aus werden die mp3-Dateien aufgelistet.

/mnt/cdrom/Nithin Sawney/Beyond Skin (complete)/02 - nitin sawhney - letting go.mp3


Von meinem Skript aus werden seltsamerweise Zeilenumbrüche im Dateinamen erzeugt, so dass dann die Dateien auf der CD nicht mehr gefunden werden können.

Ausgabe aus dem Skript:

schdefan
cp: Aufruf von stat für ,,/mnt/cdrom/Nithin" nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für ,,Sawney/Beyond" nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für ,,Skin" nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für ,,(complete)/02" nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für ,,-" nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für ,,nitin" nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für ,,sawhney" nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für ,,-" nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für ,,letting" nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für ,,go.mp3" nicht möglich: Datei oder Verzeichnis nicht gefunden


Das muß wwohl was mit den Leerstellen im Dateinamen zu tun haben!
hat jemand einen Rat?
schdefan
free software for free people.
open source for open minds.

-------------------------------------
jabber: schdefan@jabber.org

Benutzeravatar
fred19726
Beiträge: 507
Registriert: 18.07.2002 03:38:38
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Heidelberg (DE)
Kontaktdaten:

Re: bash-script: setsamer Zeilenumbruch bei find

Beitrag von fred19726 » 20.08.2004 20:24:30

Versuchs mal so:

Code: Alles auswählen

#!/bin/bash
# file: cdrom_update.sh

DIR=/music/
CD=`cd /mnt/cdrom && grep -c /mnt/auto/cdrom /proc/mounts`
clear
echo "MOUNTING CDROM"

if [ 1 -eq "$CD" ] ; then
  echo "START COPYING MP3 FILES"
  find /mnt/cdrom -type f -name "*.mp3" -exec cp -Rvf \{\} "$DIR" \;
fi
echo " END COPYING MP3 FILES"

ls -la $DIR
echo "KICK OUT CDROM"
eject
MfG Fred

/edit: hatte mich verschrieben jetzt sollte es aber stimmen :oops:
2 Dinge sind Unendlich, das Universum und die Menschliche Dummheit,
wobei ich mir beim Universum nicht sicher bin
-- Albert Einstein

Benutzeravatar
schdefan
Beiträge: 39
Registriert: 01.05.2004 19:41:59
Wohnort: wien

Beitrag von schdefan » 20.08.2004 20:51:56

Code: Alles auswählen

if [ 1 -eq "$CD" ] ; then
  echo "START COPYING MP3 FILES"
  find /mnt/cdrom/ -type f -name "*.mp3" -exec cp -Rvf \{\} "$DIR" \; 
fi
echo " END COPYING MP3 FILES"

ls -la $DIR 
echo "KICK OUT CDROM"
eject
so passt es jetz! slash hinter cdrom/ war wichtig.
Danke fred19726.

schdefan
free software for free people.
open source for open minds.

-------------------------------------
jabber: schdefan@jabber.org

Benutzeravatar
schdefan
Beiträge: 39
Registriert: 01.05.2004 19:41:59
Wohnort: wien

Beitrag von schdefan » 20.08.2004 21:26:20

Dieses Skript soll ständig laufen. Ich habe es in den crontab hinzugefügt
Eintrag in crontab:

Code: Alles auswählen

1 * * * * ~/cdrom_update
Funktioniert leider nicht!
free software for free people.
open source for open minds.

-------------------------------------
jabber: schdefan@jabber.org

Benutzeravatar
fred19726
Beiträge: 507
Registriert: 18.07.2002 03:38:38
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Heidelberg (DE)
Kontaktdaten:

Beitrag von fred19726 » 20.08.2004 21:35:04

Code: Alles auswählen

1 * * * * ~/cdrom_update
so wirds immer um eine Minute nach der vollen Stunde ausgeführt.

und so wirds jede Minute ausgeführt

Code: Alles auswählen

* * * * * ~/cdrom_update
8)
2 Dinge sind Unendlich, das Universum und die Menschliche Dummheit,
wobei ich mir beim Universum nicht sicher bin
-- Albert Einstein

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 21.08.2004 18:47:06

generell könntest du auch IFS setzen:

Code: Alles auswählen

IFS="
"
IFS ist der Irgendwas File Separator oder so ähnlich und standardmässig auf Zeilenumbruch oder Leerschlag gesetzt - wenn du den nur auf einen Zeilenumbruch setzt dann funktioniert die Sache auch.

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Benutzeravatar
schdefan
Beiträge: 39
Registriert: 01.05.2004 19:41:59
Wohnort: wien

Beitrag von schdefan » 23.08.2004 10:22:49

Die Variante von fred19726 funktioniert, aber trotzdem danke peschmae für den Hinweise des IFS.

Hab noch ein Frage zum crontab. Mit den fünf Sternen wird nun jede Minute mein Skript aufgerufen. Allerdings befinde ich mich nun in einer Endlosschleife, da das Kopieren einer kompletten CD ja länger als eine Minute dauert.
Ist das Kopieren abgeschlossen soll die CD ausgeworfen werden, deshalb habe ich ja den Befehl eject iam Ende des Skripts eingebaut. Leider öffnet sich das Laufwerk nicht, sondern der Kopiervorgang startet erneut.

Ich benutze automount. Kann man in automount mein Skript einbauen, so dass ich keine Endlosschleife mehr habe? Oder weiß jemand eine andere Lösung als jede Minute in das Verzeichnis /mnt/cdrom zu schauen und den Inhalt zu prüfen?

schdefan
free software for free people.
open source for open minds.

-------------------------------------
jabber: schdefan@jabber.org

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 23.08.2004 12:05:36

Du kannst natürlich aus dem ganzen Script eine Endlosschleife machen - d.h. das Script guckt und wartet in einer Schleife (mit etwa 1 Minute sleep jeweils). Wenn ne CD da ist liests die aus und springt dann wieder an den Anfang.

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Antworten