Question

Comment puis-je faire mv original.filename nouveau.original.fichier sans retaper le nom de fichier d'origine?

J'imagine pouvoir faire quelque chose comme mv -p = new. original.filename ou peut-être mv original.filename new. ~ ou peu importe - mais je ne peux plus rien voir de semblable 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?

Était-ce utile?

La solution

En bash et zsh, vous pouvez le faire avec Extension de brassée . 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

Vous pouvez donc renommer votre projet comme suit:

mv {,new.}original.filename

car cela devient:

mv original.filename new.original.filename

Autres conseils

Vous pouvez utiliser la commande rename (1):

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

Modifier: si le changement de nom n'est pas disponible et que vous devez renommer plusieurs fichiers, les scripts de shell peuvent être courts et simples à cette fin. Par exemple, pour renommer tous les .jpg en préfixe _ .jpg dans le répertoire actuel:

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

Vous pouvez obtenir un renommage de plusieurs fichiers 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

J'ai déjà vu des personnes mentionner une commande rename , mais elle n'est pas systématiquement disponible sur les systèmes Unix (contrairement aux systèmes Linux, par exemple, ou Cygwin - sur lesquels le renom est un exécutable. plutôt qu'un script). Cette version de renommer a une fonctionnalité assez limitée:

rename from to file ...

Il remplace la partie de des noms de fichiers par à , et l'exemple donné dans la page de manuel est le suivant:

rename foo foo0 foo? foo??

Ceci renomme foo1 à foo01 et foo10 à foo010, etc.

J'utilise un script Perl appelé rename , que j'avais initialement extrait de la première édition de Camel Book, vers 1992, puis étendu pour renommer des 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: 
rename 's/^/new./' original.filename
[-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

J'ai déjà vu des personnes mentionner une commande rename , mais elle n'est pas systématiquement disponible sur les systèmes Unix (contrairement aux systèmes Linux, par exemple, ou Cygwin - sur lesquels le renom est un exécutable. plutôt qu'un script). Cette version de renommer a une fonctionnalité assez limitée:

rename from to file ...

Il remplace la partie de des noms de fichiers par à , et l'exemple donné dans la page de manuel est le suivant:

rename foo foo0 foo? foo??

Ceci renomme foo1 à foo01 et foo10 à foo010, etc.

J'utilise un script Perl appelé rename , que j'avais initialement extrait de la première édition de Camel Book, vers 1992, puis étendu pour renommer des fichiers.

<*>

Ceci vous permet d’écrire n’importe quelle commande de substitution ou de translittération de Perl pour mapper les noms de fichiers. Dans l'exemple spécifique demandé, vous utiliseriez:

<*> || -l

J'ai déjà vu des personnes mentionner une commande rename , mais elle n'est pas systématiquement disponible sur les systèmes Unix (contrairement aux systèmes Linux, par exemple, ou Cygwin - sur lesquels le renom est un exécutable. plutôt qu'un script). Cette version de renommer a une fonctionnalité assez limitée:

rename from to file ...

Il remplace la partie de des noms de fichiers par à , et l'exemple donné dans la page de manuel est le suivant:

rename foo foo0 foo? foo??

Ceci renomme foo1 à foo01 et foo10 à foo010, etc.

J'utilise un script Perl appelé rename , que j'avais initialement extrait de la première édition de Camel Book, vers 1992, puis étendu pour renommer des fichiers.

<*>

Ceci vous permet d’écrire n’importe quelle commande de substitution ou de translittération de Perl pour mapper les noms de fichiers. Dans l'exemple spécifique demandé, vous utiliseriez:

<*>) { my($was) =

J'ai déjà vu des personnes mentionner une commande rename , mais elle n'est pas systématiquement disponible sur les systèmes Unix (contrairement aux systèmes Linux, par exemple, ou Cygwin - sur lesquels le renom est un exécutable. plutôt qu'un script). Cette version de renommer a une fonctionnalité assez limitée:

rename from to file ...

Il remplace la partie de des noms de fichiers par à , et l'exemple donné dans la page de manuel est le suivant:

rename foo foo0 foo? foo??

Ceci renomme foo1 à foo01 et foo10 à foo010, etc.

J'utilise un script Perl appelé rename , que j'avais initialement extrait de la première édition de Camel Book, vers 1992, puis étendu pour renommer des fichiers.

<*>

Ceci vous permet d’écrire n’importe quelle commande de substitution ou de translittération de Perl pour mapper les noms de fichiers. Dans l'exemple spécifique demandé, vous utiliseriez:

<*>; eval $op; die $@ if $@; next if ($was eq

J'ai déjà vu des personnes mentionner une commande rename , mais elle n'est pas systématiquement disponible sur les systèmes Unix (contrairement aux systèmes Linux, par exemple, ou Cygwin - sur lesquels le renom est un exécutable. plutôt qu'un script). Cette version de renommer a une fonctionnalité assez limitée:

rename from to file ...

Il remplace la partie de des noms de fichiers par à , et l'exemple donné dans la page de manuel est le suivant:

rename foo foo0 foo? foo??

Ceci renomme foo1 à foo01 et foo10 à foo010, etc.

J'utilise un script Perl appelé rename , que j'avais initialement extrait de la première édition de Camel Book, vers 1992, puis étendu pour renommer des fichiers.

<*>

Ceci vous permet d’écrire n’importe quelle commande de substitution ou de translittération de Perl pour mapper les noms de fichiers. Dans l'exemple spécifique demandé, vous utiliseriez:

<*>); if ($force == 0 && -f

J'ai déjà vu des personnes mentionner une commande rename , mais elle n'est pas systématiquement disponible sur les systèmes Unix (contrairement aux systèmes Linux, par exemple, ou Cygwin - sur lesquels le renom est un exécutable. plutôt qu'un script). Cette version de renommer a une fonctionnalité assez limitée:

rename from to file ...

Il remplace la partie de des noms de fichiers par à , et l'exemple donné dans la page de manuel est le suivant:

rename foo foo0 foo? foo??

Ceci renomme foo1 à foo01 et foo10 à foo010, etc.

J'utilise un script Perl appelé rename , que j'avais initialement extrait de la première édition de Camel Book, vers 1992, puis étendu pour renommer des fichiers.

<*>

Ceci vous permet d’écrire n’importe quelle commande de substitution ou de translittération de Perl pour mapper les noms de fichiers. Dans l'exemple spécifique demandé, vous utiliseriez:

<*>) { print STDERR "rename failed: $was -

J'ai déjà vu des personnes mentionner une commande rename , mais elle n'est pas systématiquement disponible sur les systèmes Unix (contrairement aux systèmes Linux, par exemple, ou Cygwin - sur lesquels le renom est un exécutable. plutôt qu'un script). Cette version de renommer a une fonctionnalité assez limitée:

rename from to file ...

Il remplace la partie de des noms de fichiers par à , et l'exemple donné dans la page de manuel est le suivant:

rename foo foo0 foo? foo??

Ceci renomme foo1 à foo01 et foo10 à foo010, etc.

J'utilise un script Perl appelé rename , que j'avais initialement extrait de la première édition de Camel Book, vers 1992, puis étendu pour renommer des fichiers.

<*>

Ceci vous permet d’écrire n’importe quelle commande de substitution ou de translittération de Perl pour mapper les noms de fichiers. Dans l'exemple spécifique demandé, vous utiliseriez:

<*> exists\n"; } else { print "+ $was -->

J'ai déjà vu des personnes mentionner une commande rename , mais elle n'est pas systématiquement disponible sur les systèmes Unix (contrairement aux systèmes Linux, par exemple, ou Cygwin - sur lesquels le renom est un exécutable. plutôt qu'un script). Cette version de renommer a une fonctionnalité assez limitée:

rename from to file ...

Il remplace la partie de des noms de fichiers par à , et l'exemple donné dans la page de manuel est le suivant:

rename foo foo0 foo? foo??

Ceci renomme foo1 à foo01 et foo10 à foo010, etc.

J'utilise un script Perl appelé rename , que j'avais initialement extrait de la première édition de Camel Book, vers 1992, puis étendu pour renommer des fichiers.

<*>

Ceci vous permet d’écrire n’importe quelle commande de substitution ou de translittération de Perl pour mapper les noms de fichiers. Dans l'exemple spécifique demandé, vous utiliseriez:

<*>\n" if $trace; print STDERR "rename failed: $was - $!\n" unless ($noexc || rename($was,

J'ai déjà vu des personnes mentionner une commande rename , mais elle n'est pas systématiquement disponible sur les systèmes Unix (contrairement aux systèmes Linux, par exemple, ou Cygwin - sur lesquels le renom est un exécutable. plutôt qu'un script). Cette version de renommer a une fonctionnalité assez limitée:

rename from to file ...

Il remplace la partie de des noms de fichiers par à , et l'exemple donné dans la page de manuel est le suivant:

rename foo foo0 foo? foo??

Ceci renomme foo1 à foo01 et foo10 à foo010, etc.

J'utilise un script Perl appelé rename , que j'avais initialement extrait de la première édition de Camel Book, vers 1992, puis étendu pour renommer des fichiers.

<*>

Ceci vous permet d’écrire n’importe quelle commande de substitution ou de translittération de Perl pour mapper les noms de fichiers. Dans l'exemple spécifique demandé, vous utiliseriez:

<*>)); } } else { print STDERR "

J'ai déjà vu des personnes mentionner une commande rename , mais elle n'est pas systématiquement disponible sur les systèmes Unix (contrairement aux systèmes Linux, par exemple, ou Cygwin - sur lesquels le renom est un exécutable. plutôt qu'un script). Cette version de renommer a une fonctionnalité assez limitée:

rename from to file ...

Il remplace la partie de des noms de fichiers par à , et l'exemple donné dans la page de manuel est le suivant:

rename foo foo0 foo? foo??

Ceci renomme foo1 à foo01 et foo10 à foo010, etc.

J'utilise un script Perl appelé rename , que j'avais initialement extrait de la première édition de Camel Book, vers 1992, puis étendu pour renommer des fichiers.

<*>

Ceci vous permet d’écrire n’importe quelle commande de substitution ou de translittération de Perl pour mapper les noms de fichiers. Dans l'exemple spécifique demandé, vous utiliseriez:

<*> - $!\n"; } }

Ceci vous permet d’écrire n’importe quelle commande de substitution ou de translittération de Perl pour mapper les noms de fichiers. Dans l'exemple spécifique demandé, vous utiliseriez:

<*>

Le moyen le plus simple de renommer en bloc les fichiers du répertoire est:

ls | xargs -I fileName mv fileName fileName.suffix

Si une modification est possible, vous pouvez utiliser un suffixe au lieu d'un préfixe. Vous pouvez ensuite 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 simple script shell pourrait cependant s’en sortir.

Dans mon cas, j'ai un groupe de fichiers qui doivent être renommés avant de pouvoir les utiliser. Chaque fichier a son propre rôle dans le groupe et a son propre modèle.

En conséquence, j'ai une liste de commandes de changement de nom comme celle-ci:

f=`ls *canctn[0-9]*`   ;  mv $f  CNLC.$f
f=`ls *acustb[0-9]*`   ;  mv $f  CATB.$f
f=`ls *accusgtb[0-9]*` ;  mv $f  CATB.$f
f=`ls *acus[0-9]*`     ;  mv $f  CAUS.$f

Essayez aussi:

f=MyFileName; mv $f {pref1,pref2}$f{suf1,suf2}

Ceci produira toutes les combinaisons avec des préfixes et des suffixes:

pref1.MyFileName.suf1
...
pref2.MyFileName.suf2

Une autre façon de résoudre le même problème consiste à créer un tableau de mappage et à ajouter le préfixe correspondant à chaque type de fichier, comme indiqué ci-dessous:

#!/bin/bash
unset masks
typeset -A masks
masks[ip[0-9]]=ip
masks[iaf_usg[0-9]]=ip_usg
masks[ipusg[0-9]]=ip_usg
...
for fileMask in ${!masks[*]}; 
do  
registryEntry="${masks[$fileMask]}";
fileName=*${fileMask}*
[ -e ${fileName} ] &&  mv ${fileName} ${registryEntry}.${fileName}  
done

Renommer en bloc les fichiers script bash

#!/bin/bash
# USAGE: cd FILESDIRECTORY; RENAMERFILEPATH/MultipleFileRenamer.sh FILENAMEPREFIX INITNUMBER
# USAGE EXAMPLE: cd PHOTOS; /home/Desktop/MultipleFileRenamer.sh 2016_
# VERSION: 2016.03.05.
# COPYRIGHT: Harkály Gergő | mangoRDI (https://wwww.mangordi.com/) 

# check isset INITNUMBER argument, if not, set 1 | INITNUMBER is the first number after renaming
if [ -z "$2" ]
    then i=1;
else
    i=$2;
fi

# counts the files to set leading zeros before number | max 1000 files
count=$(ls -l * | wc -l)
if [ $count -lt 10 ]
    then zeros=1;
else
    if [ $count -lt 100 ]
        then zeros=2;
    else
        zeros=3
    fi
fi

# rename script
for file in *
do
    mv $file $1_$(printf %0"$zeros"d.%s ${i%.*} ${file##*.})
    let i="$i+1"
done
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top