J'ai fouillé dans les questions, mais je n'arrive pas à trouver la réponse exacte dont j'ai besoin.
J'ai un répertoire avec plusieurs sous-répertoires:
sent sent.~16~ sent.~22~ sent.~29~ sent.~35~ sent.~41~ sent.~48~ sent.~54~ sent.~60~ sent.~67~ sent.~73~ sent.~8~
sent.~10~ sent.~17~ sent.~23~ sent.~3~ sent.~36~ sent.~42~ sent.~49~ sent.~55~ sent.~61~ sent.~68~ sent.~74~ sent.~80~
sent.~11~ sent.~18~ sent.~24~ sent.~30~ sent.~37~ sent.~43~ sent.~5~ sent.~56~ sent.~62~ sent.~69~ sent.~75~ sent.~81~
sent.~12~ sent.~19~ sent.~25~ sent.~31~ sent.~38~ sent.~44~
Où chaque sous-répertoire contient un tas de fichiers numérotés:
1. 11. 13. 15. 17. 4. 6. 8.
10. 12. 14. 16. 3. 5. 7. 9.
Essentiellement, j'aimerais fusionner tous ces sous-répertoires dans un seul répertoire, sans toutefois écraser les fichiers portant le même nom. Devrai-je modifier le nom des fichiers de chaque sous-répertoire (par exemple, foo --> foo_~10~)
), puis fusionner tous les fichiers dans un seul sous-répertoire?
Existe-t-il un script bash ou shell facile à utiliser pour cela? J'ai essayé quelques variantes de rsync, mv et cp, mais je n'ai pas bien compris ce que je voudrais.
Vous pouvez le faire avec un script comme
#!/bin/bash
mkdir merged
for dir in sent*
do
cd "$dir"
for file in *
do
mv "$file" "$file"_"${dir#sent.}"
done
mv * ../merged
cd ..
done
si vous souhaitez renommer chaque fichier conformément au schéma de votre question. Si vous souhaitez les renommer de manière à ce que leur ordre lexicographique reflète dans quel dossier le fichier était à l'origine, il suffit de changer l'ordre des chaînes $file
et ${dir#sent.}
.