Sur notre serveur de fichiers Linux (RedHat Enterprise), nous avons des dossiers que nous devons renommer pour que le client y travaille. L'ancien format de dossier (ceux qui doivent être modifiés) était clientcode_jobnumberjobname
. Le nouveau format est clientcode_jobnumber_jobname
. Nous avons fondamentalement besoin de changer les anciens noms de dossiers en ajoutant le trait de soulignement supplémentaire au nom de fichier entre le jobnumber
et jobname
. Nous avons également toutes les nouvelles structures de dossiers qui sont créées pour afficher dans le nouveau format, il ne sera donc pas nécessaire de les modifier. Le numéro de travail est toujours 1 lettre suivi de 4 chiffres. Le code client est de 3-4 lettres selon le client. Le nom du travail est différent pour chaque travail. Les dossiers sont tous situés au clients/clientname/jobs/clientcode/"folder that needs to be renamed"
(juste un exemple de la profondeur du script dans la structure). Il devra faire cela pour chaque clientcode
sous chaque client. Comment pourrais-je configurer un script pour le faire? Toute aide serait grandement appréciée. Nous avons des milliers de dossiers que nous devons renommer.bash Linux - Renommer le dossier Massive
Répondre
Il existe quelques commandes qui agissent comme sed sur les noms de fichiers; essayez mmv
(ou la variante perl de rename
, alias prename ou rename.PL, que vous ne trouverez peut-être pas sur RHEL). En bonus, les deux ont une option -n
(pas d'action), donc vous pouvez vérifier ce que vous allez faire ne va pas faire des choses ou perdre de l'information.
for entry in * ; do
if [ ! -d "$entry" ] ; then
continue
fi
jobname="${entry##*_?????}"
dirbase="${entry%$jobname}"
if [ -z "$dirbase" -o -z "$jobname" ] ; then
echo "Error with '$entry'"
continue
fi
mv "$entry" "${dirbase}_$jobname"
done
peut-être juste moi, mais je ne comprends tout à fait exactement comment la structure du répertoire ressemble, pourriez-vous s'il vous plaît donner un exemple dans les quelques balises de code.
Et peut-être cela devrait être sur serverfault.com (mais je suppose un #/script bin/sh compte que la programmation!)
EDIT: Noufal Ibrahim, résistant? Il s'agit d'utiliser un moyen qui fonctionne avec toutes les versions compatibles POSIX, ou Linux, peut-être im vieux, mais les machines Solaris que je n'ai pas incluent rename
ou mmv
. Par conséquent, une telle solution n'est pas possible.
puisque vous dites que le format de nom est très structuré et tout est sous un seul parent (soit comme children..not direct ou indirect que de ce que vous avez mentionné), je suggère ceci:
Créer régulièrement expression pour le nom du dossier et écrire un petit script Perl qui correspondrait au nom du contenu du dossier cible (sous lequel vous avez les dossiers à renommer) par rapport à l'expression régulière. une fois que vous avez les correspondances, renommez le dossier pour le nouveau nom. Perl rend tout cela facile. Si vous décidez de poursuivre cette approche et juste au cas où vous ne connaissez pas Perl et que vous vous demandez par où commencer et si vous êtes intéressé à faire un peu d'apprentissage en cours de route, je vous suggère de lire le livre. Minimal Perl "... une façon rapide et intéressante d'apprendre le langage monstrueux et de l'utiliser pour des choses semblables à ce dont vous avez besoin maintenant.
Espérons que cela aide.
find /path/clients -type d -name "*_?[0-9][0-9][0-9][0-9]*" | while IFS= read -r DIR
do
dir=${DIR##*/}
base=${DIR%/*}
IFS="_"
set -- $dir
front=$1
back=$2
jobname=${back#?????}
jobnum=${back%$jobname}
newname="${front}_${jobnum}_${jobname}"
echo mv "$DIR" "$base/$newname"
done
- 1. Renommer le dossier du référentiel
- 2. Renommer plusieurs fichiers dans le BASH
- 3. Bash: copier et renommer récursivement des fichiers
- 4. Renommer des fichiers en utilisant une expression régulière avec bash
- 5. Renommer et déplacer des fichiers en Bash ou en Perl
- 6. Comment renommer un dossier/répertoire en C#?
- 7. Renommer certains fichiers dans un dossier
- 8. Puis-je renommer le dossier step_definitions pour Cucumber?
- 9. commande bash linux par l'espace
- 10. Comment renommer un dossier en utilisant ZipArchive?
- 11. IronPython - comment renommer un nom de dossier
- 12. renommer des fichiers dans un dossier
- 13. script bash pour regarder un dossier
- 14. Comment renommer un processus sous Linux?
- 15. (Configuration et déploiement) Créer un dossier et renommer le dossier de destination
- 16. Git: Renommer le fichier
- 17. Massive git commit squashing
- 18. Massive Regex Question
- 19. bash trouver sous-dossier et de sauvegarde
- 20. Echange deux noms de dossier dans bash
- 21. Parse nom du dossier dans bash
- 22. bash Linux: affectation de variables multiples
- 23. Linux/bash conseils pour les développeurs?
- 24. comment faire MAC reconnaître linux BASH?
- 25. Php renommer() ne peut pas renommer le répertoire sous Unix
- 26. ado.net entité cadre massive confusion
- 27. Script Batch pour renommer les fichiers dans l'argument du dossier
- 28. Renommer un fichier/dossier dans un fichier zip en Java?
- 29. Batch: Renommer un dossier dans les 'fichiers programme'
- 30. liste des propriétaires de fichiers dans le dossier sur Linux
+1 pour résister au désir de le coder. –
Le renommer RH est différent du renommer Debian, et ne fonctionnera pas ici. –
Il est parfois appelé 'prename'. –