1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#!/bin/sh
#Usage : renommer un fichier en récupérant une chaine contenue dans le fichier
# parametre 1 : filtre recherche fichier
# parametre 2 : Chaine recherchee
# parametre 3 : mot cle permettant de déterminer la chaine precedent le nom du fichier dans la ligne $info
#
# Exemple :les fichiers node_xxx.c contiennent un commentaire /* Node NODE_A_B */
#
# -> Renomme "node*.c" "/* Node" "Node"
#
for file in `find -type f -name "$1" -print;`
do
# Traitement des fichiers passés en arguments for file in $*
# Recherche de la chaine "Node"
info=$(fgrep "$2" $file)
echo "$info"
# Contrôle de cohérence: vérification qu'il n'y a bien qu'une seul chaine
# Si ce n'est pas le cas, je laisse tomber ce fichier
if test $(echo "$info" |wc -l) -gt 1
then
echo "$file non traité car incohérent"
continue
fi
# Récupération de l'extension du fichier à renommer
# ext=$(echo "$file" |cut -f2- -d/)
ext=$(echo "$file" |sed 's/.*\.//g')
# Récupération du dossier contenant le fichier à renommer
dir=$(dirname "$file")
# Extraction du nom du fichier (la chaine qui suit le mot "$3")
nom=$(echo "$info" |awk '{ for (i=1; i <= NF; i++) if ($i == "$3") { print $(i+1); break }}')
# On renomme
echo "$file => $dir/$nom.$ext"
mv "$file" "$dir/$nom.$ext"
done |
Partager