le second est parfait pour renommer des fichiers sans extension! Merci!
anon58192932
2
le second ajoute une extension sur tous les fichiers, pas seulement ceux sans extension
Jeff
5
tout comme une note "${f%.jpg}"est la manipulation de chaînes de shell bash. `$ {string% substring}` Supprime la plus courte correspondance de $ substring à l'arrière de $ string.
Jichao
Attention: si vous avez un dossier avec des extensions mixtes, sachez que ce qui précède s'ajoute .jpgmême aux fichiers normaux.
quelle version de changement de nom utilisez-vous? Le mien a des arguments différents:rename from to file...
B Johnson
1
rename est inclus avec perl, qui est la version 5.10.1.
Kim Stebel
3
Cela fonctionne très bien avec le renommage inclus dans Ubuntu (et donc je suppose que toutes les distributions basées sur Debian), beaucoup moins verbeux que la réponse de jm666.
la commande ci-dessus est pour une exécution à sec , après cela, vous devez supprimer le "echo" avant mv
EDIT
Certaines personnes suggérant que ici est nécessaire "Mettre les arguments de chemin entre guillemets; évite le fractionnement des arguments sur les chemins avec des espaces" .
Habituellement, cette recommandation est vraie, dans ce cas ne l'est pas. Parce que, ici, le %n'est pas remplacé par l'expansion du shell mais par le xargsinterne (directement), donc le %sera remplacé correctement même avec des espaces dans les noms de fichiers.
Démo simple:
$ mkdir xargstest
$ cd xargstest
# create two files with spaces in names
$ touch 'a b''c d'
$ find .-type f -print
./c d
./a b
# notice, here are spaces in the above paths#the actual xargs mv WITHOUT quotes
$ find .-type f -print | xargs -I % mv %%.ext
$ find .-type f -print
./a b.ext
./c d.ext
# the result is correct even in case with spaces in the filenames...
Vous pouvez mettre cela en boucle et ces xargs sont superflus. J'aime mieux la réponse de Ryan dans cette situation.
Lucius
1
@Lucius - btw, la question veut des fichiers "sans extension" - donc Ryan ne devrait trouver que ceux-là ...
jm666
@ jm666 hé! comment puis-je modifier votre extrait de code pour renommer tous les fichiers sans extension d'un dossier en leurs extensions respectives. (Je détecte les extensions correctes par la commande file -b $ filename.)
Soumyajit
24
Simple, cd dans le répertoire où se trouvent vos fichiers et:
Dans mon cas, je n'étais pas au courant du type de fichier, j'ai donc utilisé la commande mv à l'aide de la commande file pour examiner et éventuellement trouver le type de fichier. Cette solution n'est peut-être pas parfaite pour tous les fichiers car la commande file peut ne pas reconnaître le type de fichier, mais cela a fonctionné très bien pour moi.
for f in*;do ext=$(file $f | awk '{print $2;}'); mv -n "$f""$f.$ext";done
L'utilisation de awk consiste à supprimer le deuxième mot de la chaîne renvoyée par le fichier de commandes qui est en fait l'extension.
gère automatiquement les jpg et png. utilisé et fonctionne - merci beaucoup! Ce n'est que maintenant que les extensions sont des CAPS. petit problème cependant :)
krivar le
0
rename --dry-run *-a ".jpg"# test *-a ".jpg"# rename
--dry-runet -ane sont pas disponibles dans ma version de rename. Si cela est spécifique à une architecture, il doit être spécifié.
Fernando César
0
Vous pouvez utiliser déplacer plusieurs fichiers . Je suis un mainteneur de ce projet. La syntaxe est simple.
mmf files*
Il ouvrira votre $ EDITOR avec tous les noms de fichiers, ou vim par défaut et vous pourrez simplement mettre en surbrillance la fin de tous les noms de fichiers en utilisant Ctrl + v + G dans vim, enregistrer le fichier, quitter et que tout vos fichiers soient renommés
mv "${file}" "${file}.jpg"
?Réponses:
la source
"${f%.jpg}"
est la manipulation de chaînes de shell bash. `$ {string% substring}` Supprime la plus courte correspondance de $ substring à l'arrière de $ string..jpg
même aux fichiers normaux.Vous pouvez utiliser renommer:
la source
rename from to file...
Une autre façon - sans boucles
Panne:
la commande ci-dessus est pour une exécution à sec , après cela, vous devez supprimer le "echo" avant mv
EDIT Certaines personnes suggérant que ici est nécessaire "Mettre les arguments de chemin entre guillemets; évite le fractionnement des arguments sur les chemins avec des espaces" .
Habituellement, cette recommandation est vraie, dans ce cas ne l'est pas. Parce que, ici, le
%
n'est pas remplacé par l'expansion du shell mais par lexargs
interne (directement), donc le%
sera remplacé correctement même avec des espaces dans les noms de fichiers.Démo simple:
la source
Simple, cd dans le répertoire où se trouvent vos fichiers et:
la source
for f in *;do mv "$f" "$f".jpg;done
pour prendre en charge les espaces dans les noms de fichiers.course à sec:
changement de nom réel:
la source
la source
Dans mon cas, je n'étais pas au courant du type de fichier, j'ai donc utilisé la commande mv à l'aide de la commande file pour examiner et éventuellement trouver le type de fichier. Cette solution n'est peut-être pas parfaite pour tous les fichiers car la commande file peut ne pas reconnaître le type de fichier, mais cela a fonctionné très bien pour moi.
L'utilisation de awk consiste à supprimer le deuxième mot de la chaîne renvoyée par le fichier de commandes qui est en fait l'extension.
la source
la source
--dry-run
et-a
ne sont pas disponibles dans ma version derename
. Si cela est spécifique à une architecture, il doit être spécifié.Vous pouvez utiliser déplacer plusieurs fichiers . Je suis un mainteneur de ce projet. La syntaxe est simple.
Il ouvrira votre $ EDITOR avec tous les noms de fichiers, ou vim par défaut et vous pourrez simplement mettre en surbrillance la fin de tous les noms de fichiers en utilisant Ctrl + v + G dans vim, enregistrer le fichier, quitter et que tout vos fichiers soient renommés
la source
Ryan Li
La syntaxe correcte pour ajouter une extension de fichier à plusieurs fichiers dans un répertoire qui n'ont pas d'extension de fichier est
la source