Vous pourriez essayer un script récursif. Voici quelque chose qui ressemble à ce qui pourrait fonctionner. Cela fonctionne sur un répertoire de test que je viens de créer et qui contient des fichiers et des répertoires qui contiennent des fichiers nommés comme vous le décrivez. Ce script parcourt récursivement toute l'arborescence des répertoires et remplace toute occurrence de : : dans tous les noms de fichiers par un point. Il est configuré pour accepter un répertoire ou une liste de répertoires comme argument ou arguments, mais il fonctionne aussi sur un seul fichier. Je ne suis pas sûr que cela prenne en compte toutes les considérations nécessaires ou les scénarios d'erreur possibles, donc ajustez-le en fonction de vos besoins si vous l'utilisez.
#!/bin/bash
function rmCols() {
if [[ ! -e $1 ]]
then
usage "$1" 1
fi
if [[ -f $1 ]]
then
if [[ -w $1 ]]
then
rename :: . "$1"
else
usage "$1" 2
fi
elif [[ -d $1 ]]
then
if [[ -w $1 ]]
then
for THING in "$1"/*
do
if [[ -f $THING ]]
then
rename :: . "$THING"
elif [[ -d $THING ]]
then
rmCols "$THING"
fi
done
else
usage "$1" 3
fi
else
usage "$1" 4
fi
}
function usage() {
echo "
Usage:
rmCols accepts a variable number of files and/or directories as arguments and will add the
current date between the filename and the file type extension for all files in all directory
argument(s) or for any file argument(s), recursively.
Syntax:
rmCols dirName_1 [dirName_2] [dirName_3] ......." >&2
if [[ $2 -eq 1 ]]
then
echo "
Error:
There is no such file or directory as $1, check your spelling" >&2
exit 1
elif [[ $2 -eq 2 ]]
then
echo "
Error:
You do not have permission to change the file $1" >&2
exit 2
elif [[ $2 -eq 3 ]]
then
echo "
Error:
You do not have permission to change the directory $1" >&2
exit 3
elif [[ $2 -eq 4 ]]
then
echo "
Error:
$1 is something other than a file or directory" >&2
exit 4
fi
}
shopt -s nullglob
for item in "$@"
do
[[ -h $item ]] && continue
rmCols "$item"
done
exit 0
Cela ne change que les noms de fichiers et non les noms de répertoires, bien qu'une légère modification devrait permettre de gérer les noms de répertoires également. Il y a probablement un outil Linux qui fera cela sans script cependant, je ne suis tout simplement pas familier avec lui. Bien que cela fonctionne, je suis sûr qu'il existe une meilleure solution.