Comment déplacer des fichiers et des répertoires vers le dossier parent sous Linux?

Réponses:

66
trouver . -maxdepth 1 -exec mv {} .. \;

cela déplacera également les fichiers cachés.

Vous recevrez le message:

mv: impossible de déplacer `. ' à «../»: périphérique ou ressource occupé

quand il essaie de se déplacer .(répertoire actuel) mais que cela ne causera aucun dommage.

John T
la source
1
Il déplacera également tous les fichiers de tous les sous-répertoires vers le parent du répertoire actuel. J'utiliserais -maxdepth 1pour être sûr.
aphink
1
Maintenant, il dit: mv: ne peut pas se déplacer ./scripts' to .. / scripts ': répertoire pas vide
1
Vous devez avoir un répertoire appelé scripts dans votre répertoire parent ET dans votre répertoire actuel. Vous devrez renommer celui-ci avant de le déplacer.
aphink
1
Cela a fonctionné, mais vous avez laissé une information très importante - vous devez l'exécuter à partir du sous-répertoire. De plus, cela ne supprimera pas le sous-répertoire lui-même, vous devez donc sauvegarder un répertoire et faire un rmdir sur le sous-répertoire.
Artisan
90

Je suis venu ici parce que je suis aussi novice dans ce domaine. Pour une raison quelconque, ce qui précède n'a pas fait l'affaire pour moi. Ce que j'ai fait pour déplacer tous les fichiers d'un répertoire vers son répertoire parent était:

cd to/the/dir
mv * ../
Ben Fransen
la source
12
Cela ne déplace pas le fichier caché cependant
Wavesailor
1 doublure:(cd ${ANDROID_NDK_HOME}/android-ndk-r14b/ && mv * ../)
Dawid Drozd
10

Tapez ceci dans le shell:

mv *.* ..

Cela déplace TOUS les fichiers d'un niveau.

Le personnage *est un joker. Ainsi *.deb, tous les fichiers .deb Zeitgeist.*seront déplacés , ainsi que les dossiers Zeitgeist.avi et Zeitgeist.srt vers le haut, puisque, bien sûr, ..indique le répertoire parent.

Pour tout déplacer, y compris les dossiers, etc., utilisez simplement *au lieu de*.*

Gil
la source
3
cela n'a pas fonctionné avec les dirs! ou les fichiers cachés
Cela fonctionne avec les dirs, du moins pour moi.
Maaartinus
5
Vous voulez *ne *.*pas inclure de répertoires
Chris S
C'est un beau documentaire
BlackBurn027
6

Cela ne peut pas être plus simple que:

mv * ../

Pour déplacer également les fichiers cachés:

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

mvest une commande pour déplacer des fichiers, *désigne tous les fichiers et dossiers et ../constitue le chemin d'accès au répertoire parent.

William Edwards
la source
2

En bash, vous pouvez utiliser shopt -s dotglob pour faire correspondre * tous les fichiers et les déplacer simplement en

shopt -s dotglob; mv * ..

Ce n'est pas la meilleure solution car le paramètre est permanent pour le shell jusqu'à ce que vous le changiez par

shopt -u dotglob

mais je pense que c'est bon à savoir.

maaartinus
la source
4
Appelez dans un sous - shell: (shopt -s dotglob && mv * ..). De cette façon, l’option n’est locale que dans ce sous-shell.
Martin Ueding
Bonne réponse - c'est simple, inclut les fichiers cachés et ne cause pas d'erreur de copie. et '..'
Daniel Howard
1

Une méthode qui ne cause aucune erreur et fonctionne à chaque fois:

ls -1A . | while read -r file                                                    
do                                                                                  
    mv "./${file}" ..                                                            
done
djhaskin987
la source
1
find . -maxdepth 2 -type f -exec mv {} .. \;

J'ai utilisé une variante de ci-dessus pour déplacer tous les fichiers des sous-dossiers dans le parent.

J'avais des données dans des dossiers par année, mais grâce aux métadonnées, je pouvais toutes les avoir dans le même dossier, ce qui facilitait la gestion.

par exemple.

/data/2001/file_1
/data/2002/file_2
/data/2003/file_3
Bill Bixby
la source
0

En supposant que tous vos fichiers cachés commencent par un point suivi d'une lettre ou d'un chiffre (ce qu'ils devraient), vous pouvez utiliser

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

La .[A-Za-z0-9]*partie est de vous assurer de ne pas essayer de déplacer .ou le ..long, ce qui échouerait.

Inkaphink
la source
0

Il est simple de déplacer tous les fichiers et dossiers vers le répertoire parent sous Linux.

Allez dans ce dossier et utilisez cette commande:

mv * /the full path

Par exemple, si vos fichiers et dossiers sont les suivants:

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

Allez dans ce dossier via cd:

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

Tous vos fichiers et dossiers seront déplacés vers le dossier abcuser (répertoire parent).

Abhishek
la source
2
Merci @Gareth, était à peu près le même. Abhishek, s'il vous plaît, ne postez pas de liens sans lien, quel est le sens de cela? Aussi, vérifiez votre formatage s'il vous plaît. De plus, /the full pathne fonctionne pas sous Linux, vous devez échapper des espaces avec /the\ full\ path.
Slhck
0

Il n'est pas nécessaire de changer de répertoire. Il suffit d'inclure * à la fin du chemin:

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

Ci-dessus ne déplace que les fichiers non cachés. Pour déplacer uniquement les fichiers cachés, utilisez. *

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

Au-dessus de deux peuvent être combinés en une seule commande:

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

Voir aussi: Comment déplacer tous les fichiers, y compris les fichiers cachés, dans le répertoire parent via *

Shital Shah
la source
0
find -type f|while read line; do mv $line ${line##*/}; done
Adler
la source
Merci de contribuer une réponse. Bien que cela pourrait fonctionner dans des scénarios simples, la tuyauterie finden while readest une mauvaise façon d'utiliser findet de meilleures réponses ont déjà été posté.
Scott
-1

passez au sous-répertoire et exécutez la commande suivante pour copier ou déplacer des fichiers.

ex: a est le répertoire parent et b est le sous-répertoire, nous voulons déplacer / copier tous les fichiers de b vers a (sous-répertoire dans le répertoire parent).

cd b
cp * ..
mv * ..
M Ikram
la source
Bienvenue sur Super User! Cela duplique une autre réponse et n’ajoute aucun nouveau contenu. S'il vous plaît, ne postez pas de réponse sauf si vous avez réellement quelque chose de nouveau à contribuer.
DavidPostill