134 votes

Comment renommer avec prefix / suffix?

Comment faire mv original.filename new.original.filename sans retaper le nom du fichier d'origine?

J'imagine pouvoir faire quelque chose comme mv -p=new. original.filename ou peut-être mv original.filename new.~ ou autre chose - mais je ne peux rien en dire après avoir regardé man mv / info mv pages.

Bien sûr, je pourrais écrire un script shell pour le faire, mais n’y at-il pas une commande / un indicateur pour cela?

197voto

Simon Lehmann Points 5442

Vous pouvez utiliser la commande rename (1):

 rename 's/(.*)$/new.$1/' original.filename
 

Edit: Si renommer n'est pas disponible et que vous devez renommer plus d'un fichier, les scripts shell peuvent être courts et simples pour cela. Par exemple, pour renommer tous les fichiers .jpg en préfixe * .jpg dans le répertoire actuel:

 for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;
 

144voto

Dave Webb Points 90034

Dans Bash et zsh, vous pouvez le faire avec Brace Expansion . Cela élargit simplement une liste d'éléments entre accolades. Par exemple:

 # echo {vanilla,chocolate,strawberry}-ice-cream
vanilla-ice-cream chocolate-ice-cream strawberry-ice-cream
 

Pour que vous puissiez renommer comme suit:

 mv {,new.}original.filename
 

comme cela se développe à:

 mv original.filename new.original.filename
 

26voto

A Muguro Points 61

Vous pouvez obtenir un changement de nom de fichier multiple compatible Unix (en utilisant des caractères génériques) en créant une boucle for:

 for file in *; do
  mv $file new.${file%%}
done
 

10voto

Jonathan Leffler Points 299946

J'ai vu des gens parler d'un rename de commande, mais il n'est pas systématiquement disponible sur les systèmes Unix (par opposition aux systèmes Linux ou Cygwin - sur lesquels, renommer est un exécutable plutôt qu'un script). Cette version de l' rename a un nombre assez restreint de fonctionnalités:

rename from to file ...

Il remplace, à partir de la partie des noms de fichier avec les vers, et l'exemple donné dans la page de man est:

rename foo foo0 foo? foo??

Cette renomme toto1 à foo01, et foo10 à foo010, etc.

J'utilise un script Perl appelé rename, ce qui je creusée à partir de la première édition de Chameau livre, circa 1992, puis élargi, pour renommer les fichiers.

#!/bin/perl -w
#
# @(#)$Id: rename.pl,v 1.7 2008/02/16 07:53:08 jleffler Exp $
#
# Rename files using a Perl substitute or transliterate command

use strict;
use Getopt::Std;

my(%opts);
my($usage) = "Usage: $0 [-fnxV] perlexpr [filenames]\n";
my($force) = 0;
my($noexc) = 0;
my($trace) = 0;

die $usage unless getopts('fnxV', \%opts);

if ($opts{V})
{
    printf "%s\n", q'RENAME Version $Revision: 1.7 $ ($Date: 2008/02/16 07:53:08 $)';
    exit 0;
}
$force = 1 if ($opts{f});
$noexc = 1 if ($opts{n});
$trace = 1 if ($opts{x});

my($op) = shift;
die $usage unless defined $op;

if (!@ARGV) {
    @ARGV = <STDIN>;
    chop(@ARGV);
}

for (@ARGV)
{
    if (-e $_ || -l $_)
    {
        my($was) = $_;
        eval $op;
        die $@ if $@;
        next if ($was eq $_);
        if ($force == 0 && -f $_)
        {
            print STDERR "rename failed: $was - $_ exists\n";
        }
        else
        {
            print "+ $was --> $_\n" if $trace;
            print STDERR "rename failed: $was - $!\n"
                unless ($noexc || rename($was, $_));
        }
    }
    else
    {
        print STDERR "$_ - $!\n";
    }
}

Cela vous permet d'écrire du Perl de substitution ou de translittérer de commande à la carte les noms de fichier. Dans l'exemple particulier demandé, vous pouvez utiliser:

rename 's/^/new./' original.filename

2voto

workmad3 Points 12974

S'il est ouvert à une modification, vous pouvez utiliser un suffixe au lieu d'un préfixe. Ensuite, vous pouvez utiliser la complétion par tabulation pour obtenir le nom de fichier d'origine et ajouter le suffixe.

Sinon, non, ce n'est pas quelque chose qui est supporté par la commande mv. Un script shell simple pourrait cependant faire face.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X