Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Probleme bei Script mit Leerzeichen im Namen
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
doedel
Guru
Guru


Joined: 05 Feb 2006
Posts: 579
Location: Denmark

PostPosted: Sun Oct 23, 2011 12:27 pm    Post subject: Probleme bei Script mit Leerzeichen im Namen Reply with quote

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
View user's profile Send private message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1176

PostPosted: Sun Oct 23, 2011 12:36 pm    Post subject: Re: Probleme bei Script mit Leerzeichen im Namen Reply with quote

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
View user's profile Send private message
doedel
Guru
Guru


Joined: 05 Feb 2006
Posts: 579
Location: Denmark

PostPosted: Sun Oct 23, 2011 12:45 pm    Post subject: Reply with quote

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
View user's profile Send private message
disi
Veteran
Veteran


Joined: 28 Nov 2003
Posts: 1354
Location: Out There ...

PostPosted: Sun Oct 23, 2011 12:55 pm    Post subject: Reply with quote

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
View user's profile Send private message
doedel
Guru
Guru


Joined: 05 Feb 2006
Posts: 579
Location: Denmark

PostPosted: Sun Oct 23, 2011 1:04 pm    Post subject: Reply with quote

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
View user's profile Send private message
disi
Veteran
Veteran


Joined: 28 Nov 2003
Posts: 1354
Location: Out There ...

PostPosted: Sun Oct 23, 2011 1:11 pm    Post subject: Reply with quote

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
View user's profile Send private message
py-ro
Veteran
Veteran


Joined: 24 Sep 2002
Posts: 1733
Location: St. Wendel

PostPosted: Sun Oct 23, 2011 1:18 pm    Post subject: Reply with quote

Dein Problem _ist_ dein ls, ls -1 und den IFS auf ein Newline setzen, dann sollte es passen.

Py
Back to top
View user's profile Send private message
toralf
Developer
Developer


Joined: 01 Feb 2004
Posts: 3688
Location: Hamburg

PostPosted: Sun Oct 23, 2011 1:40 pm    Post subject: Reply with quote

hilft folgender Ansatz weiter ? :
Code:
find . -type f -print0 | xargs -0 -I{} echo ich tu was mit "{}"
Back to top
View user's profile Send private message
mv
Watchman
Watchman


Joined: 20 Apr 2005
Posts: 6281

PostPosted: Sun Oct 23, 2011 3:21 pm    Post subject: Re: Probleme bei Script mit Leerzeichen im Namen Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum