J'ai une collection de fichiers correspondant à un modèle tel que 'affectation02.cc', 'affectation02.h', 'affectation02.txt', etc. Je voudrais copier / renommer ces fichiers dans 'affectation03.cc', 'affectation03. h ',' assignation03.txt ', etc.
Je soupçonne que cela devrait être simple en utilisant un script shell et sed. Jusqu'à présent, j'ai:
OLD_NO=$1
NEW_NO=$2
echo "Moving from $OLD_NO to $NEW_NO"
for name in assignment$OLD_NO.* ; do
newname=$(echo $name | sed 's/\(.*\)$OLD_NO\(.*\)/\1xx$NEW_NO\2/')
echo "$name -> $newname"
# mv -v $name $newname
done
Malheureusement, la façon dont j'invoque sed renvoie toujours la chaîne d'entrée $name
et ne fait pas réellement la recherche / remplacement d'expression régulière.
Remarque: En regardant sur Internet, il y a une rename
commande qui a cette fonctionnalité, mais qui n'est pas disponible sur mon MacBook.
shell-script
sed
file-management
rename
Gilles 'SO- arrête d'être méchant'
la source
la source
$OLD_NO
et$NEW_NO
ne sera pas développé.newname=$(echo $name | tr $OLD_NO $NEW_NO)
Réponses:
L'utilisation de sed ici introduit plus de complexité qu'elle n'en vaut la peine. Utilisez les fonctionnalités intégrées de manipulation de texte du shell. Par exemple,
${name#assignment02}
supprime le préfixeassignment02
de$name
.Les guillemets doubles ne sont pas nécessaires si vous êtes sûr que les noms de fichier ne contiennent aucun caractère spécial shell.
Si zsh est disponible, sa
zmv
fonction est utile pour ce type de changement de nom.la source
Vous pensez déjà trop complexe
'rename' remplace le premier arg ('02') par le second arg ('03') dans le nom de tous les fichiers donnés sur arg3 ou après (* 02 *)
la source
rename
commande avec cette syntaxe est un utilitaire Linux, non disponible sur OSX (et même pas disponible sous ce nom sur la plupart des installations Debian et Ubuntu).Une approche différente:
À long terme: essayez d'obtenir «renommer»
la source
Une façon de le faire est:
la source
ls
. Et générer un script shell est un moyen sûr de se tirer une balle dans la tête. La question de Vault Boy contient une approche raisonnable du côté de la coque, manquant juste la bonne incantation sed et quelques citations.