View previous topic :: View next topic |
Author |
Message |
doedel Guru
Joined: 05 Feb 2006 Posts: 579 Location: Denmark
|
Posted: Sun Oct 23, 2011 12:27 pm Post subject: Probleme bei Script mit Leerzeichen im Namen |
|
|
Hi,
ich habe vor einiger Zeit etwas über 1.000 3,5" und 5,25" Floppys mittels dd auf meinen Rechner gesichert und ab und zu landet davon etwas in einer VM.
Da mir das jedoch zu aufwendig wird und ich bis auf die Boot-Disketten keine Images haben will, habe ich angefangen ein Script zu schreiben, welches mir die Dateien "entpacken" soll.
Das Funktioniert auch soweit ganz gut, bis auf die Images, welche Leerzeichen und Klammern usw im Namen haben.
Bsp:
schneider_dos5.0_D1.img funktioniert ohne Probleme
Turbo C eigene progs (A-F).img funktioniert nicht. Dort legt er mir dann 5 Verzeichnisse an ("Turbo", "C", "eigene", "progs" und "(A-F)") und versucht die Datei (A-F).img zu mounten.
Da er bisher nur 142 Images von 1135 entpackt hat, weil die anderen alle Leerzeichen haben fällt ein Umbennen raus.
Das Script:
Code: |
#!/bin/bash
mkdir loop # ordner für loopback mount
for file in `ls *.img`
do
mkdir `echo "$file" | cut -d "." -f 1` # folder anlegen, selber name wie image datei nur ohne suffix
sudo mount -o loop "$file" loop/ # image mounten
cp -rv loop/* `echo "$file" | cut -d "." -f 1` # dateien aus image kopieren
sync
sudo umount loop/
done
rmdir loop
|
Ich hab das $file schon extra in " " gesetzt, aber das bringt nichts... Hoffentlich kann mir da einer von euch weiterhelfen _________________ 1 ha == 1 Hekto-Ar == 1 Hektar |
|
Back to top |
|
|
Christian99 Veteran
Joined: 28 May 2009 Posts: 1721
|
Posted: Sun Oct 23, 2011 12:36 pm Post subject: Re: Probleme bei Script mit Leerzeichen im Namen |
|
|
doedel wrote: |
Code: | mkdir `echo "$file" | cut -d "." -f 1` # folder anlegen, selber name wie image datei nur ohne suffix |
|
das ergibt dir ja folgenden befehl:
Code: | mkdir datei name mit leerzeichen |
du willst aber
Code: | mkdir "datei name mit leerzeichen" |
sprich du musst die ´´ in Anführungszeichen setzen (zusätzlich).
das selbe noch bei der cp zeile |
|
Back to top |
|
|
doedel Guru
Joined: 05 Feb 2006 Posts: 579 Location: Denmark
|
Posted: Sun Oct 23, 2011 12:45 pm Post subject: |
|
|
Ich hab das jetzt so:
Code: |
mkdir "`echo "$file" | cut -d "." -f 1`" # folder anlegen, selber name wie image datei nur ohne suffix
cp -rv loop/* "`echo "$file" | cut -d "." -f 1`" # dateien aus image kopieren
|
aber habe immernoch das selbe Ergebnis wie oben... _________________ 1 ha == 1 Hekto-Ar == 1 Hektar |
|
Back to top |
|
|
disi Veteran
Joined: 28 Nov 2003 Posts: 1354 Location: Out There ...
|
Posted: Sun Oct 23, 2011 12:55 pm Post subject: |
|
|
Ich wuerde folgendes versuchen, weil er anscheinend die Dateien nicht auseinanderhalten kann:
Code: | for file in `ls -1 *.img` |
Das listed eine Datei per Zeile...
//edit: tut nicht :/ _________________ Gentoo on Uptime Project - Larry is a cow |
|
Back to top |
|
|
doedel Guru
Joined: 05 Feb 2006 Posts: 579 Location: Denmark
|
Posted: Sun Oct 23, 2011 1:04 pm Post subject: |
|
|
Das ls -1 hab ich schon versucht, hätte ich vielleicht auch mal schreiben sollen, funktioniert ebenfall nicht - selbes Ergebnis.
Ich hab jetzt auch schon eine Weile nach diesem Problem gesucht - aber mir fällt noch nichtmal ein sinnvoller Suchbegriff dazu ein, da kann man schlecht was finden. _________________ 1 ha == 1 Hekto-Ar == 1 Hektar |
|
Back to top |
|
|
disi Veteran
Joined: 28 Nov 2003 Posts: 1354 Location: Out There ...
|
Posted: Sun Oct 23, 2011 1:11 pm Post subject: |
|
|
Das wuerde funktionieren ist aber lol, naja
Code: | for file in `ls *.txt | sed s/\ /\./g`;do;echo $file;done |
Du muesstest dann eben das sed andersherum laufen lassen fuer den Ordner anlegen usw. etwa so:
Code: | mkdir `echo $file | sed s/./\ /g` |
Wenn du moechtest, ansonsten nur fuer das einhaengen
//edit: Nimm underscore
Code: | for file in `ls *.txt | sed s/\ /\_/g`;do;echo $file | sed s/_/\ /g;done |
//edit: sieht dann so aus:
Code: | disi@disi-bigtop ~ % for file in `ls *.txt | sed s/\ /\_/g`;do;echo $file | sed s/_/\ /g;done
blubb test test.txt
disi@disi-bigtop ~ % ls *.txt
blubb test test.txt |
_________________ Gentoo on Uptime Project - Larry is a cow |
|
Back to top |
|
|
py-ro Veteran
Joined: 24 Sep 2002 Posts: 1734 Location: Velbert
|
Posted: Sun Oct 23, 2011 1:18 pm Post subject: |
|
|
Dein Problem _ist_ dein ls, ls -1 und den IFS auf ein Newline setzen, dann sollte es passen.
Py |
|
Back to top |
|
|
toralf Developer
Joined: 01 Feb 2004 Posts: 3942 Location: Hamburg
|
Posted: Sun Oct 23, 2011 1:40 pm Post subject: |
|
|
hilft folgender Ansatz weiter ? : Code: | find . -type f -print0 | xargs -0 -I{} echo ich tu was mit "{}"
|
|
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Sun Oct 23, 2011 3:21 pm Post subject: Re: Probleme bei Script mit Leerzeichen im Namen |
|
|
Dein Code hat etliche Probleme: `ls -1 ...` macht schon mal alle Leerzeichen kaputt.
`...` sollte man nicht verwenden, wenn Zeilenenden am Schluss des Namens auftauchen könnten (und außerhalb von "..." hat es ebenfalls Probleme mit Leerzeichen)
Wenn Filenamen mit "-" beginnen, werden diese in etlichen Deiner Kommandos als Option behandelt.
Ansonsten ist Dein Code POSIX, so dass Du auch /bin/sh statt /bin/bash benutzen könntest:
Code: | #!/bin/sh
mkdir loop
for file in *.img
do no_suffix="${file%.*}"
mkdir -- "$no_suffix"
sudo -- mount -o loop -- "$file" loop/
cp -rv -- loop/* "$no_suffix"
sync # Überflüssig, da umount das richtig behandeln sollte
sudo umount loop/
done
rmdir loop
|
Stattt "loop" könnte man natürlich ein temporäres Directory benutzen und dieses auch in einer "trap" wieder löschen falls das Script unterwegs (etwa mit Ctrl-C) abgebrochen werden sollte... |
|
Back to top |
|
|
|