Vous avez attiré votre attention avec ce titre, n'est-ce pas? LOL.
Problème: j'ai beaucoup de dossiers qui ont un dossier à l'intérieur, avec des fichiers à l'intérieur. Je souhaite déplacer les fichiers de niveau 2 vers le niveau 1 sans le savoir.
Graphiquement, voici ce que je veux:
Actuel:
new
└── temp
├── Folder1
│ ├── SubFolder1
│ │ └── SubTest1.txt
│ └── Test1.txt
├── Folder2
│ ├── SubFolder2
│ │ └── SubTest2.txt
│ └── Test2.txt
└── Folder3
├── SubFolder3
│ └── SubTest3.txt
└── Test3.txt
Voulu:
└── temp
├── Folder1
│ ├── SubFolder1
│ ├── SubTest1.txt
│ └── Test1.txt
├── Folder2
│ ├── SubFolder2
│ ├── SubTest2.txt
│ └── Test2.txt
└── Folder3
├── SubFolder3
├── SubTest3.txt
└── Test3.txt
Si on veut avoir envie, ce que je n'ai pas besoin de faire car plus tard dans mon script, je supprime les fichiers vides, mais il convient de le mentionner au cas où je pourrais en apprendre encore plus:
└── temp
├── Folder1
│ ├── SubTest1.txt
│ └── Test1.txt
├── Folder2
│ ├── SubTest2.txt
│ └── Test2.txt
└── Folder3
├── SubTest3.txt
└── Test3.txt
Je deviens très proche mais il me manque quelque chose et je suis sûr que c'est simple / stupide. Voici ce que je cours:
find . -mindepth 3 -type f -exec sh -c 'mv -i "$1" "${1%/*}"' sh {} \;
Voici ce que ça me procure:
mv: './1stlevel/2ndlevel/test.rtf' and './1stlevel/2ndlevel/test.rtf' are the same file
Sur Débordement de pile , George m'a rapproché en me donnant:
find . -mindepth 4 -type f -exec mv {} ./*/* \;
aussi bien que:
mv ./*/*/*/* ./*/*
La commande mv est la voie à suivre, car elle est plus propre et beaucoup plus rapide. Mais hélas, bien que cela fonctionne très bien avec un dossier, plusieurs dossiers le transforment en ceci:
new
└── temp
└── Folder3
├── Folder1
│ ├── SubFolder1
│ └── Test1.txt
├── Folder2
│ ├── SubFolder2
│ └── Test2.txt
├── SubFolder3
├── SubTest1.txt
├── SubTest2.txt
├── SubTest3.txt
└── Test3.txt
Donc, je me rapproche mais pas tout à fait là. Aucune suggestion? Merci d'avance!