Comment aplatir un seul niveau de répertoires dans une commande de terminal?

J’ai trouvé beaucoup de scripts qui vont aplatir récursivement tout le contenu des sous-dossiers et des sous-dossiers de ces sous-répertoires. Mais je veux juste aplanir un niveau et garder les sous-dossiers intacts. Comment pourrais-je y arriver avec peut-être un script bash?

mv */* . 

Si vous ne vous souciez pas des répertoires cachés, c’est aussi simple que cela.

 mkdir -p dir0/dir1/dirA/dirX mkdir -p dir0/dir2/dirB/dirY mkdir -p dir0/dir3/dirC/dirZ 

Voyons comment c’est maintenant:

 tree dir0 

Résultats:

 dir0/ ├── dir1 │  └── dirA │  └── dirX ├── dir2 │  └── dirB │  └── dirY └── dir3 └── dirC └── dirZ 

Maintenant, allons courir

 find dir0 -mindepth 2 -maxdepth 2 -exec mv -i '{}' dir0 ';' 

Regardons comment dir0 est maintenant:

 tree dir0 

Résultat:

 dir0 ├── dir1 ├── dir2 ├── dir3 ├── dirA │  └── dirX ├── dirB │  └── dirY └── dirC └── dirZ 

Ps: Vous pourriez aussi lancer quelque chose comme ceci:

  mv dir0/*/* dir0 

Que dis-tu de ça?

 array=($(ls)) for i in "${array[@]}" do echo $i if [ -d $i ]; then cd $i ls cd .. fi done 

vous obtenez la sortie de tous les sous-répertoires de premier niveau, plus tout depuis le niveau supérieur.