Je travaille avec une arborescence de dossiers et de fichiers avec la structure
- \ Stories \ 00 \ 0 \ 00000 \ temp.xxx
- \ Stories \ 00 \ 0 \ 00001 \ temp.xxx
- ...
- \ Histoire \ 10 \ 5 \ 10552 \ temp.xxx
- \ Histoire \ 10 \ 5 \ 10553 \ temp.xxx
- ...
- \ Histoire \ 45 \ 9 \ 45998 \ temp.xxx
- \ Histoire \ 45 \ 9 \ 45999 \ temp.xxx
Ce dont j'ai besoin, c'est de renommer les fichiers de sorte que temp.xxx soit transformé en un nom de fichier séquencé, comme indiqué ci-dessous:
- \ Stories \ 00 \ 0 \ 00000 \ 00000.xxx
- \ Histoires \ 00 \ 0 \ 00001 \ 00001.xxx
- ...
- \ Histoire \ 10 \ 5 \ 10552 \ 10552.xxx
- \ Histoire \ 10 \ 5 \ 10553 \ 10553.xxx
- ...
- \ Histoire \ 45 \ 9 \ 45998 \ 45998.xxx
- \ Histoire \ 45 \ 9 \ 45999 \ 45999.xxx
Réponses:
Si votre structure est uniforme et que vous avez la profondeur de 3 à l'intérieur de votre dossier History, la manière intuitive serait peut-être d'avoir des boucles imbriquées puis d'utiliser le mv pour renommer.
Le code suivant suppose que vous avez un fichier dans chaque dossier de la couche 3 et que / History ne contient rien d'autre que des répertoires.
peut-être que ces deux liens sont également utiles:
http://www.cyberciti.biz/faq/bash-for-loop/
https://stackoverflow.com/questions/539583/how-do-i-recursively-list-all-directories-at-a-location-breadth-first
la source
Vous pouvez le faire avec une commande comme celle-ci:
Explication pas à pas.
Ceci est votre exemple d'entrée:
Je modifie la sortie pour l'adapter à la sortie requise.
Donc, nous transformons chaque
temp*
dans unemv
commande avec les noms de sortie requis. La commande ressemble à ceci:Pour exécuter chaque commande de la sortie précédente, il faut ajouter
| source /dev/stdin
à la fin de la commande.Les résultats seront les suivants:
la source