Wie verschiebe ich Dateien und Verzeichnisse in den übergeordneten Ordner unter Linux?


Antworten:


66
finden . -maxtiefe 1 -exec mv {} .. \;

Dadurch werden auch versteckte Dateien verschoben.

Sie erhalten die Nachricht:

mv: kann sich nicht bewegen zu `../. ': Gerät oder Ressource belegt

wenn es versucht, zu verschieben .(aktuelles Verzeichnis), aber das wird keinen Schaden anrichten.


1
Es werden auch alle Dateien aus allen Unterverzeichnissen in das übergeordnete Verzeichnis des aktuellen Verzeichnisses verschoben. Ich würde es benutzen -maxdepth 1, um sicher zu sein.
ℝaphink

1
Jetzt heißt es: mv: kann ./scripts' to mich nicht bewegen ../scripts ': Verzeichnis nicht leer

1
Sie müssen ein Verzeichnis mit dem Namen scripts in Ihrem übergeordneten Verzeichnis UND in Ihrem aktuellen Verzeichnis haben. Sie müssen diesen umbenennen, bevor Sie ihn verschieben.
ℝaphink

1
Es hat funktioniert, aber Sie haben eine sehr wichtige Information hinterlassen - Sie müssen diese im Unterverzeichnis ausführen. Dadurch wird auch das Unterverzeichnis selbst nicht gelöscht, sodass Sie ein Verzeichnis sichern und ein rmdir für das Unterverzeichnis ausführen müssen.
Crafter

89

Ich bin hierher gekommen, weil ich auch neu in diesem Thema bin. Aus irgendeinem Grund hat das oben Genannte nicht den Trick für mich getan. Was ich getan habe, um alle Dateien von einem Verzeichnis in das übergeordnete Verzeichnis zu verschieben, war:

cd to/the/dir
mv * ../

12
Dies verschiebt jedoch keine versteckte Datei
Wavesailor

1 Liner:(cd ${ANDROID_NDK_HOME}/android-ndk-r14b/ && mv * ../)
Dawid Drozd

10

Geben Sie dies in die Shell ein:

mv *.* ..

Das verschiebt ALLE Dateien eine Ebene nach oben.

Der Charakter *ist ein Platzhalter. So *.debwerden alle .deb - Dateien bewegen, und Zeitgeist.*wird Zeitgeist.avi und Zeitgeist.srt einen Ordner nach oben bewegen , da natürlich ..das Verzeichnis Eltern angibt.

Um alles zu verschieben, einschließlich Ordner usw., verwenden Sie einfach *anstelle von*.*


3
das hat mit den dirs nicht geklappt! oder die versteckten Dateien

Zumindest bei mir funktioniert es mit dirs.
Maaartinus

5
Sie möchten *keine *.*Verzeichnisse
Chris S

Es ist eine schöne Dokumentation
BlackBurn027

6

Einfacher geht es nicht als:

mv * ../

So verschieben Sie auch versteckte Dateien:

mv /path/subfolder/{.,}* /path/ 

mvist ein Befehl zum Verschieben von Dateien, *bedeutet alle Dateien und Ordner und ../ist der Pfad zum übergeordneten Verzeichnis.


2

In bash können Sie shopt -s dotglob verwenden , um * alle Dateien abzugleichen und sie einfach zu verschieben

shopt -s dotglob; mv * ..

Dies ist nicht die beste Lösung, da die Einstellung für die Shell permanent ist, bis Sie sie durch ändern

shopt -u dotglob

aber ich finde es gut zu wissen.


4
Nennen Sie es in einer Subshell: (shopt -s dotglob && mv * ..). Auf diese Weise ist die Option nur lokal für diese Subshell.
Martin Ueding

Gute Antwort - es ist einfach, enthält versteckte Dateien und verursacht keinen Fehler beim Kopieren von "." und ".."
Daniel Howard

1

Eine Methode, die keine Fehler verursacht und jedes Mal funktioniert:

ls -1A . | while read -r file                                                    
do                                                                                  
    mv "./${file}" ..                                                            
done

1
find . -maxdepth 2 -type f -exec mv {} .. \;

Ich habe eine Variante von oben verwendet, um alle Dateien aus Unterordnern in den übergeordneten Ordner zu verschieben.

Ich hatte bis zum Jahr Daten in Ordnern, aber mithilfe von Metadaten konnte ich feststellen, dass sich alle Daten in demselben Ordner befanden, was die Verwaltung vereinfachte.

z.B.

/data/2001/file_1
/data/2002/file_2
/data/2003/file_3

0

Angenommen, alle Ihre versteckten Dateien beginnen mit einem Punkt, gefolgt von einem Buchstaben oder einer Zahl (die sie sollten), können Sie verwenden

mv * .[A-Za-z0-9]* ..

Der .[A-Za-z0-9]*Teil ist, um sicherzustellen, dass Sie nicht versuchen, sich zu bewegen .oder ..mitzumachen, was fehlschlagen würde.


0

Unter Linux ist es einfach, alle Dateien und Ordner in das übergeordnete Verzeichnis zu verschieben.

Gehen Sie in diesen Ordner und verwenden Sie diesen Befehl:

mv * /the full path

Beispiel: Ihre Dateien und Ordner lauten wie folgt:

/home/abcuser/test/1.txt 
                   2.txt
                   3.jpg
                   4.php
                   1folder
                   2folder

Gehe zu diesem Ordner via CD:

cd /home/abcuser/test
mv * /home/abcuser

Alle Ihre Dateien und Ordner werden in den Ordner abcuser (übergeordnetes Verzeichnis) verschoben.


2
Danke @Gareth, war ungefähr gleich. Abhishek, bitte poste keine anderen Links, wo ist der Sinn dabei? Bitte überprüfen Sie auch Ihre Formatierung. Außerdem /the full pathfunktioniert das unter Linux nicht, man muss Leerzeichen mit entkommen /the\ full\ path.
Slhck

0

Verzeichnisse müssen nicht geändert werden. Fügen Sie einfach * am Ende des Pfades ein:

mv /my/folder/child/* /my/folder/

Oben werden nur nicht versteckte Dateien verschoben. Um nur versteckte Dateien zu verschieben, verwenden Sie. *

mv /my/folder/child/.* /my/folder/

Über zwei können in einem Befehl kombiniert werden:

mv /my/folder/child/{.,}* /my/folder/

Siehe auch: So verschieben Sie alle Dateien einschließlich versteckter Dateien über * in das übergeordnete Verzeichnis


0
find -type f|while read line; do mv $line ${line##*/}; done

Vielen Dank für Ihre Antwort. Während dies in einfachen Szenarien funktionieren kann, ist die Verwendung von Piping findin while readeine schlechte Methode find, und es wurden bereits bessere Antworten veröffentlicht.
Scott

-1

Wechseln Sie in das Unterverzeichnis und führen Sie den folgenden Befehl aus, um Dateien zu kopieren oder zu verschieben.

Beispiel: a ist das übergeordnete Verzeichnis und b ist das Unterverzeichnis. Wir möchten alle Dateien von b nach a (Unterverzeichnis in das übergeordnete Verzeichnis) verschieben / kopieren.

cd b
cp * ..
mv * ..

Willkommen bei Super User! Dies dupliziert eine andere Antwort und fügt keinen neuen Inhalt hinzu. Bitte posten Sie keine Antwort, es sei denn, Sie haben tatsächlich etwas Neues beizutragen.
DavidPostill
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.