Fehlerausgabe umlenken cp&mv -i Ausgabe wird auch umgeleitet

B

Bazzty

Grünschnabel
Hi,

is vielleicht ne doofe Frage, doch Google -help und manpage helfen nich weiter :(

Ich möchte mein home Verzeichnis mit nem Script inner bash Schell aufräumen. Natürlich habe ich nicht ständig jede Art der angegebenen Dateiarten im Ordner ^^. Demzufolge habe ich eine Fehlermeldung für jeden Dateityp, der nicht da is...
Ich wollte das mit "2>/dev/null" wegschmeissen, doch da gehen mir auch die Nachfragen für den -i Parameter flöten ich habe den mal in ne datei umgeleitet:

cp: „Incomming/Shellscripts/shell.sh“ überschreiben?
cp: „Incomming/Shellscripts/test.sh“ überschreiben?
cp: „Incomming/Shellscripts/verschieb.sh“ überschreiben?


Genau diese Abfrage will ich aber in der bash haben, damit ich nicht Dateien mit dem gleichen Dateinamen überschreibe, da auch der -u Parameter bringt mir da nixx...
Kann ich das irgendwie in einer Schleife umleiten- wenn- dann- umbenennen???
Oder gibt es eine einfachere Möglichkeit???

PS: Mir ist eh schleierhaft, warum das als Ausgabe 2 und nicht als Standartausgabe behandelt wird...

# verschieben / kopieren
mv -i *.txt *.txt~ *.odt \Incomming/Texte
mv -i *.tar.gz *.tar.bz2 *.tar *.rar *.deb *.pl \Incomming/Archive
mv -i *.rpm *.run \Incomming/Rpm_Run
mv -i *.mpg *.wmv *.avi \Incomming/Filme
cp -i *.sh \Incomming/Shellscripts 2>logger.txt

#Inhaltsverzeichnis schreiben
cd \Incomming
ls -R > Inhalt.txt

echo "Alle Aufgaben erledigt, Inhaltsverzeichnis unter Inhalt.txt im Incomming- Ordner"
 
Zuletzt bearbeitet:
Mit dem Befehl hier kannst du das Ganze problemlos machen.
Ich habs jetzt mal nur für die Textdateien gemacht, du kannst es dann selbst übertragen.
Code:
find . -maxdepth 1 \( -name "*.odt" -or -name "*.txt" -or -name "*.txt~" \) -exec /bin/mv -i {} Incomming/Texte  \;
 
schonma danke für die schnelle Hilfe!

jau, so einfach!!
Erst finden, dann sichern nicht erst verschieben und dann die Fehlermeldung^^ lol so einfach...
klappt übrigens reibungslos thx
Mir bleibt nur noch eine Frage: Warum werden derartige Abfragen (cp: „Incomming/Shellscripts/shell.sh“ überschreiben?) als Fehlerprotokoll angegeben und nicht als Standartausgabe??


sry newbe:)
 
Zuletzt bearbeitet:
Weil es sich sonst mit der Standardausgabe überschneiden würde (z.B. bei "mv -v" )

.. denke ich zumindest mal
 
Hallo

Die Abfrage wird dort durch einen Error-code ausgelöst. -> Datei existiert schon!

Frage mal so nebenbei:
Bist du dir sicher, dass deine Ausgaben aus einer *nixuiden Shell stammen?

Solche Dinge wie
sehen verdächtig nach Windows aus.

Gruß Wolfgang
 
Der Mensch is nen Gewohnheitzztier *smile*

Jau, das stammt aus der langjährigen "Windows- Schule" °_°
bin eben ein von Win gelangweilter Umsteiger...

Habe nun das nächste Problem: Werd ich abgefragt, ob ich eine Datei überschreiben will, wird mir gesagt:
bash: y: command not found
Ich habe nun die skurilsten Antworten versucht: y;Y;j;J;Ja;0;1:....
Nur bei einem ausgeschriebenen "yes" gibt es eine Reaktion, nämlich eine unendliche ausgabe von y´s...
Nur es wird auch so nich überschrieben...
Bei bash: NunachendlichduPenn0r: command not found hab ich nun aufgegeben, nachdem ich seit zwei Stunden komplizierte Foren für ein einfaches Problem durchforstet habe...
Was will der hören?? yp >yes please< *smile*
Hilfe!!
 
Hallo
Dann frag ich jetzt noch mal ganz konkret:
Welche shell benutzt du unter welchem System?

Welche locale hast du eingestellt?

Sollte diese auf de_DE@euro oder ähnlichen stehen, sollte ein "ja" zum Ziel führen.

Gruß Wolfgang
 
Ich habe hier die bash 1.5.2 unter kde 3.4.2 level b, Suse 10.0. die eingestellte sprache ist: de_DE.UTF-8 ...
Ich habe nun noch mal vorsichtshalber auf de_DE@euro umgestellt, dennoch kein Ergebnis...
Ich bin fast davor den Parameter -i wegzulassen/is nur keine Lösung, is nur aufgeschoben.
Wie gesagt, an Antworten wie ja;j,y usw. hab ich alles ausprobiert, was meine Phantasie hergibt..
 
Gib mal bitte den Befehl hier an, mit dem Du Kopieren oder Bewegen willst. Nach dem, was Du schilderst, scheint cp/mv die interaktiven Antworten von woanders her zu beziehen (vielleicht irgendeine Pipe/Umleitung). Nach den Fehlermeldungen (y/Y not found...) interpretiert die Bash diese Antworten, nicht aber cp/mv.

Gruss, Xanti
 
Hallo
Gib auch mal bitte
bash --version ein.
1.5.2 scheint doch etwas sehr alt für die SuSe 10.0 .
Normalerweise erwarte ich da mindestens die 2.0.5b oder höher.

Du gibst das direkt in der Shell ein? DesktopPC
Also nicht etwa via irgend so einer Fernverbindung die da noch eine Rolle spielen könnte.

Gruß Wolfgang
 
Ups, die Version ist:
3.00.16(1)-release (i586-suse-linux)

Die Datei führ ich in meinem home- Verzeichnis über die shell aus.

Naja, ich habe die Befehlszeile von oben übernommen:
find . -maxdepth 1 \( -name "*.odt" -or -name "*.txt" -or -name "*.txt~" \) -exec /bin/mv -i {} Incomming/Texte \;

mv fragt auch nach und bash antwortet:
mv: „/home/bazzty/Incomming/Texte/logger.txt“ überschreiben? bazzty@linux:~> y
bash: y: command not found
 
Zuletzt bearbeitet:
Versuch mal mit mv -i ... (ohne find) ein einzelnes File zu bewegen.

Gruss, Xanti
 
Xanti= Versuch mal mit mv -i ... (ohne find) ein einzelnes File zu bewegen.

Schau dir mal das erste Script an, es funktioniert, nur eben die Fehlermeldungen....
Wenn ich das manuell eingebe, gehtzz auch.....

Mitlerweile habe ich das doch mit -b gemacht....
so funzzt es, is dennoch keine lösung, is nur umgangen & nur der halbe Effect....

*find . -maxdepth 1 \( -name "*.odt" -or -name "*.txt" -or -name "*.txt~" \) -exec /bin/mv -b {} \Incomming/Texte \;
 
Vielleicht gehts ja mit ner Schleife..

for i in $(find . -maxdepth 1 \( -name "*.odt" -or -name "*.txt" -or -name "*.txt~" \)); do mv -i $i Incomming/Texte; done
 
Oder

Code:
for i in *.odt *.txt *.txt~; do mv -i $i Incomming/Texte; done

Gruss, Xanti
 
Mµ*e^13.5_?¿ schrieb:
Mit dem Befehl hier kannst du das Ganze problemlos machen.
Code:
find . -maxdepth 1 \( -name "*.odt" -or -name "*.txt" -or -name "*.txt~" \) -exec /bin/mv -i {} Incomming/Texte  \;
IMHO kann das nicht funktionieren...da mit '-exec' eine Subshell geöffnet wird und man keinen interaktiven Zugriff auf den Stdin des mv-Kommandos erhält...richtig? :think:
 
Schlaubi_fi.de schrieb:
IMHO kann das nicht funktionieren...da mit '-exec' eine Subshell geöffnet wird und man keinen interaktiven Zugriff auf den Stdin des mv-Kommandos erhält...richtig? :think:
Das wird das Problem hier wohl sein, allerdings funktioniert der Befehl bei mir (Debian Sarge). :think:
 
Schlaubi_fi.de schrieb:
IMHO kann das nicht funktionieren...da mit '-exec' eine Subshell geöffnet wird und man keinen interaktiven Zugriff auf den Stdin des mv-Kommandos erhält...richtig? :think:

...es sei denn, man startet mv in einer interaktiven shell, oder man nutzt statt -exec mv...
-ok mv...


siehe auch man bash
In addition to the single-character shell options documented in the description of the set builtin command,
bash interprets the following options when it is invoked:

-c string If the -c option is present, then commands are read from string. If there are arguments after the
string, they are assigned to the positional parameters, starting with $0.
-i If the -i option is present, the shell is interactive.
...
man find
-ok Kommando;
wie -exec, vor der Ausführung des Kommandos wird aber noch eine Bestätigung erwartet; nur eine Eingabe,
die mit einem B oder einem y beginnt, führt zur Ausführung des Kommandos

HTH
Gruß Wolfgang
PS Übrigens ist es auch interessant, wohin die Shebang zeigt.
/bin/sh ist nicht gleich /bin/bash
/bin sh arbeitet im POSIX Modus, was bei /bin/bash nicht so sein muss.
Daher fallen unter Umständen einiger Erweiterungen weg.
 
Aaah okay...danke Wolfgang, dann sollte es besser lauten:

Es wird zwar eine interaktive Shell gestartet, jedoch hat man keinen Zugriff auf den Stdin des mv-Kommandos - welchen man mit setzen der find-Option -ok erhält, da find nun auf eine Benutzereingabe wartet, ehe er weiter sucht...

Nur mir ist noch nicht so ganz klar, warum das oben zitierte find-Kommando bei Mµ*e^13.5_?¿ unter Debian funktioniert...das hat doch mit der Distribution nichts zu tun! :think:
 
Zuletzt bearbeitet:
Also bei funktioniert Mµ*e^13.5_?¿s Vorschlag auch (FreeBSD 6.0)

Gruss, Xanti
 
Zurück
Oben