ubuntuusers.de

Von Unterverzeichnissen nach . verschieben

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

skewjack

Anmeldungsdatum:
17. Dezember 2011

Beiträge: 8

Meine bisherige Lösung funktioniert leider nicht, da das Verzeichnis nicht gefunden wird. Betreffende Stelle:

1
`mv "${1}/*" "."`;

Dies wird nur ausgeführt, wenn $1 ein Verzeichnis ist. Es soll alle Dateien aus dem betroffenen Verzeichnis in ihr Elternverzeichnis verschieben (auch alle darin liegenden Ordner).

Beispiel: Ausgeführt wird das Programm in alpha/ . Falls alpha/beta/ ein Ordner ist, sollen alle alpha/beta/* nach alpha/ verschoben werden, sodass alpha/beta/ nun ein leeres Verzeichnis ist.

Wo liegt der Haken, wie löse evtl besser? Mit cd gabs nur noch mehr Probleme.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

skewjack schrieb:

Meine bisherige Lösung funktioniert leider nicht, da das Verzeichnis nicht gefunden wird. Betreffende Stelle:

1
`mv "${1}/*" "."`;

Wenn ich Deinen Beitrag zitiere sehe ich, dass Du es als bash-Code formatiert hast. Dabei stören die Backticks - wozu sind sie da? - und das Semikolon am Ende ist auch überflüssig. Ich vermute daher, es ist nur ein Teil eines größeren Ganzen.

Damit nicht jeder den Beitrag erst zitieren muss lasse ich meine vorläufige Interpretation mal stehen.

skewjack

(Themenstarter)

Anmeldungsdatum:
17. Dezember 2011

Beiträge: 8

Richtig, es ist nur eine Zeile aus einem größeren Programm, das in der bash läuft. Es sollen hier einfach alle Dateien im Verzeichnis ./$1 nach ./ verschoben werden.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Hi skewjack,

erstmal willkommen hier auf dem Forum !

Hast Du mal in man mv nachgeguckt ...?
Da steht nämlich, dass es auch noch die Option --target-directory gibt. Probier mal diese beiden Varianten:

mv "${1}/*"  "./"
mv -t . "${1}/*"

LG,

track

skewjack

(Themenstarter)

Anmeldungsdatum:
17. Dezember 2011

Beiträge: 8

Richtig, es ist nur eine Zeile aus einem größeren Programm, das in der bash läuft. Es sollen hier einfach alle Dateien im Verzeichnis ./$1 nach ./ verschoben werden.

skewjack

(Themenstarter)

Anmeldungsdatum:
17. Dezember 2011

Beiträge: 8

Auch mit der -t Option gibts als Rückmeldung, dass das Verzeichnis oder die Datei alpha/* nicht gefunden worden seien.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13209

skewjack schrieb:

Auch mit der -t Option gibts als Rückmeldung, dass das Verzeichnis oder die Datei alpha/* nicht gefunden worden seien.

Ja, das liegt daran, dass in allen Euren bisherigen Lösungen der Stern innerhalb der doppelten Anführungsstriche steht. Dann wird er direkt verwendet und die Shell globbt nicht. So kann man das machen:

1
$ mv "$1"/* "$1"/..

Randnotiz: versteckte Dateien werden auf die Weise nicht mit verschoben! Wenn man das auch will, kann man es so machen:

1
$ mv "$1"/* "$1"/.* "$1"/.. 2>/dev/null

Die Umleitung verhindert die hässlichen Ausgaben für "." und "..".

Ciao

robert

skewjack

(Themenstarter)

Anmeldungsdatum:
17. Dezember 2011

Beiträge: 8

Wunderbar, so hat es funktioniert. Dankschön euch allen!

Antworten |