Si tous les fichiers sont dans le même répertoire, la séquence
ls |
sed -n 's/\(.*\)\(-[0-9.]*\.pkg\)/mv "\1\2" "\1.pkg"/p' |
sh
fera votre travail. Le site sed créera une séquence de mv que vous pouvez ensuite introduire dans le shell. Il est préférable d'exécuter d'abord le pipeline sans la terminaison | sh
afin de vérifier que la commande fait ce que vous voulez.
Pour effectuer une récursion dans plusieurs répertoires, utilisez quelque chose comme
find . -type f |
sed -n 's/\(.*\)\(-[0-9.]*\.pkg\)/mv "\1\2" "\1.pkg"/p' |
sh
Notez que dans sed la séquence de regroupement des expressions régulières est constituée de parenthèses précédées d'une barre oblique inverse, \(
y \)
plutôt que des parenthèses simples (
y )
.
1 votes
J'ai l'intention de l'utiliser régulièrement, comme un script à écrire une fois pour toutes. Tout système que j'utiliserai aura bash dessus, donc je n'ai pas peur des bashismes qui sont très pratiques.
0 votes
Plus généralement, voir aussi stackoverflow.com/questions/28725333/