web-dev-qa-db-fra.com

Script Shell pour déplacer tous les fichiers des sous-dossiers dans le dossier parent

J'ai un tas de dossiers dans le dossier A. Je souhaite déplacer des fichiers de tous ces dossiers vers A.

Ou

Je veux couper tous les fichiers des dossiers enfants et les coller dans le dossier parent.

Comment faire ça?

46
Rahul Virpara

Accédez à votre répertoire A et exécutez

find . -mindepth 2 -type f -print -exec mv {} . \;

ce qui signifie "trouver tous les fichiers de ce répertoire et de ses sous-répertoires et exécuter mv avec le répertoire cible. pour chaque fichier trouvé, pour les déplacer dans le répertoire en cours.

77
Tuminoid

Vous pouvez bien créer un fichier et nommez-le "cutme" (pour créer un fichier appelé cutme dans le type de terminal nano cutme. Pour le sauvegarder, appuyez sur CTRL + X puis sur ENTRÉE.) Et collez le texte suivant en supposant que:

  1. Vous voulez le faire de manière récursive (dans les sous-dossiers et sous-dossiers de ces sous-dossiers)
  2. Vous voulez ignorer le déplacement du fichier de script
  3. Vous avez les autorisations pour déplacer les fichiers dans ce dossier
  4. Les fichiers peuvent ou non inclure des espaces dans leurs noms

find * -type f -print -not -type d -and -not -regex 'cutme' -exec mv {} .. \;

Notez le nom cutme à l'intérieur de la ligne. Il devrait être identique au script que vous allez exécuter.

Après avoir créé le fichier et collé la ligne ci-dessus, exécutez ce qui suit dans le même dossier que le script:

chmod +x cutme. Cela donnera à votre nouveau fichier l’indicateur "Executable" afin que vous puissiez l’exécuter comme suit: ./cutme.

4
Luis Alvarado