Étant donné les fichiers suivants:
english_api
english_overview
style.css
Je veux obtenir:
english_api.html
english_overview.html
style.css
En d'autres termes, comment ajouter un texte à tous les fichiers qui ne contiennent pas de point ( .
) dans un répertoire à l'aide de terminal.
Évidemment, il y a beaucoup de fichiers dans ce dossier; Je viens d'écrire 3 comme exemple.
Si je devais, disons, remplacer .css
par .html
dans ce dossier, j'utiliserais:
rename .css .html *.css
Mais je ne peux pas vraiment penser à un moyen de faire correspondre des fichiers qui ne contiennent pas quelque chose. Aussi comment ajouter (vs remplacer) en utilisant la rename
commande?
la source
for file in path/to/files/!(*.*); do echo mv "$file" "$file.html"; done
La commande renomme également les répertoires.Mon préféré dans des cas comme celui-ci est
mmv
. Il n'est pas installé par défaut dans Ubuntu, mais vous pouvez l'installer à l'aide de lasudo apt-get install mmv
commande.Dans votre cas, vous devez l'utiliser deux fois:
Renommez tous les fichiers du répertoire actuel en ajoutant
.html
à la fin de chaque nom de fichier:Renommez à nouveau (en arrière) tous les fichiers qui avaient précédemment dans leur nom un ou plusieurs
.
(points):Ou, en une seule ligne:
-v
l'option n'est pas obligatoire. Je l'utilise uniquement pour une sortie détaillée car sans elle, ilmmv
effectue des actions en silence.Voir
man mmv
pour plus d'informations.la source
Avec la commande Perl rename (
prename
), vous pouvez ajouter une condition selon laquelle le nom de fichier doit contenir un point. Si l'extrait de code Perl ne modifie pas le nom d'un fichier, ce fichier reste intact. Voici quelques façons d'écrire ceci:la source
Les réponses sont parfaites, je vous donne également une autre commande qui fait ce travail:
Quelques explications:
REMARQUE :
J'essaie votre scénario et la commande fait le boulot.
la source
ls
.awk
etsh
, essayez quelque chose commeprintf "'%s'\n" -- !(*.*) | awk '{print "mv -- "$0" "$0".html"}' | sh
. Cela cassera toujours les noms de fichiers avec des sauts de ligne mais au moins cela peut traiter les espaces. Le--
est nécessaire pour les cas où vous avez des noms de fichiers commençant par-
.