mikrocontroller.net

Forum: PC-Programmierung Linux: whitespace im Dateinamen: Wie kann ich das lösen?


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hello peoples,

Assume a file containing a list of filenames.

$cat list
ein langer sommerabend.txt
some other file

Now, I want to copy them all at once and write therefor a loop like this
$for i in $(cat list); do cp $i newdir; done

Obviuosly I am running into the "whitespace in a filename" problem
which I don't know how to solve. Does have somebody an advice
or a working solution for me?

Best regards, Daniel

Autor: Chris S. (schris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Enclose the $i in double quotes and you don´t have the problem anymore.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chris S. schrieb:
> Enclose the $i in double quotes and you don´t have the problem anymore.

Won't help because the input is already split into separate words by the 
"for i in $(cat list)".

(while read i; do cp "$i" newdir; done) <list

Autor: Chris S. (schris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Then use the command apply, or use sed instead.
Apply is more simple and useful, check the man page.

sed would be something like this, remove the echo after testing.

sed -e 's/^[ \t]*/echo cp "/' -e 's,[ \t]*$," newdir,' list |sh

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chris S. schrieb:
> Then use the command apply, or use sed instead.
> Apply is more simple and useful, check the man page.
>
> sed would be something like this, remove the echo after testing.
>
> sed -e 's/^[ \t]*/echo cp "/' -e 's,[ \t]*$," newdir,' list |sh

Should this have any advantage over my solution?

Autor: Fiedel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
You have to set the InternalFieldSeperator-Variable to the newline char. 
Then bash will cut the input in lines, instead of token.

http://wi-fizzle.com/article/276

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
xargs -d\\n cp -t newdir < list

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[offtopic]
Usefull for filetransfers Windows <=> Linux...

detox
http://detox.sourceforge.net/
[/offtopic]

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cat list | while read FILE; do cp "$FILE" newdir; done

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thank you.

(while read i; do cp "$i" newdir; done) <list

this one I like the most

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.