PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash, zip und dateiname mit leerzeichen



Same
15-07-2009, 21:21
Hallo zusammen,

hab ein Problem mit einem Bash Skript. Unzwar kann ich meine Variable $name nicht richtig an zip übergeben. Hab schon meine bei der Zuweisung der Variable mit " gearbeitet,aber ohne Erfolg. Hab auch schon im zip kommando "eingefügt auch ohne Erfolg. Find leider nichts im Netz was mir hilft. Hier mal mein Skript.



#!/bin/bash

date=$(date +%d.%m.%Y)
time=$(date +%H:%M:%S)
name=$(basename $2)

if [ -e "$2" ]; then
if [ "$1" = "-r" ]; then
echo "packe und lösche $2"
zip -r /home/papierkorb/"$name".zip $2 && rm -Rf $2
echo "$date - $time Entferne => $2" > /home/skripte/papierkorb.log
elif [ "$1" = "-x" ]; then
echo "papierkorb leeren"
rm -Rf /home/papierkorb/*
else
echo "falsche Parameter"
fi
else
echo "Datei oder Verzeichnis existiert nicht"
fi


Vieleicht hat auch jemand eine Idee wie ich mein Script optimiere.

BLUESCREEN3D
15-07-2009, 22:25
Bei $2 musst du auch " setzen.
Ansonsten sollte es so gehen. Du musst natürlich beim Aufrufen des Scriptes bei den Parametern, die Leerzeichen enthalten, auch auf die " achten.

Same
16-07-2009, 15:15
meinst du wo ich basename anwende? oder an welcher stelle. Ich krieg es immer noch nicht hin. Hab mal nur $2 bei basename von anführungszeichen eingeschlossen, aber es hilft nicht. es geht auch nicht wenn ich bei der eingabe des parameters einfach den dateinamen mit anführungszeichen schreibe.

es kommt die fehlermeldung


zip warning: name not matched: /home/b3nni/datei
zip warning: name not matched: name.avi

zip error: Nothing to do! (try: zip -r /home/papierkorb/datei name.avi.zip

BLUESCREEN3D
16-07-2009, 18:20
Zeile 5 und 10 (in 10 doppelt) meinte ich.
Wie rufst du das Script denn auf? Schreib hier bitte ein Beispiel rein.

Same
16-07-2009, 18:54
ich geb dann folgenden Befehl ein

pako -r /home/Benutzer/"datei name.avi"


pako steht für papierkorb ;)

ich werd das mit den Anführungszeichen morgen nochmal testen. muss ich in Zeile 10 den kompletten pfad in Anführungszeichen nehmen? Eigentlich müsste es ausreichen den Namen in Anführungszeichen zu setzen oder?

BLUESCREEN3D
17-07-2009, 14:20
Es reicht, den Teil mit Leerzeichen zu quoten.

name=$(basename "$2")
...
zip -r /home/papierkorb/"$name".zip "$2" && rm -Rf "$2"

Same
17-07-2009, 17:27
Super Danke es funktioniert.

ich musste den Teil jetzt noch separat machen



elif [ "$1" = "-x" ]; then
echo "papierkorb leeren"
rm -Rf /home/papierkorb/*

und jetzt funktioniert das Skript