Pregunta

¿Cómo hago mv original.filename new.original.filename sin volver a escribir el nombre del archivo original?

Me imagino poder hacer algo como mv -p = new. original.filename o quizás mv original.filename new. ~ o lo que sea, pero no puedo ver nada como esto después de mirar man mv / info mv páginas.

Por supuesto, podría escribir un script de shell para hacer esto, pero ¿no hay un comando / indicador existente para ello?

¿Fue útil?

Solución

En Bash and zsh puedes hacer esto con Expansión de llaves . Esto simplemente expande una lista de elementos entre llaves. Por ejemplo:

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

Para que pueda cambiar su nombre de la siguiente manera:

mv {,new.}original.filename

a medida que se expande a:

mv original.filename new.original.filename

Otros consejos

Podría usar el comando renombrar (1):

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

Editar: Si renombrar no está disponible y tienes que renombrar más de un archivo, el shell scripting puede ser breve y simple para esto. Por ejemplo, para cambiar el nombre de todos .jpg a prefix_ .jpg en el directorio actual:

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

Puede lograr un cambio de nombre de varios archivos compatible con Unix (usando comodines) creando un bucle for:

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

He visto a personas mencionar un comando rename , pero no está disponible de manera rutinaria en los sistemas Unix (a diferencia de los sistemas Linux, por ejemplo, o Cygwin; en ambos casos, rename es un ejecutable en lugar de un guión). Esa versión de rename tiene una funcionalidad bastante limitada:

rename from to file ...

Reemplaza la parte de de los nombres de archivo con a , y el ejemplo dado en la página del manual es:

rename foo foo0 foo? foo??

Esto cambia el nombre de foo1 a foo01, y foo10 a foo010, etc.

Utilizo un script de Perl llamado rename , que originalmente saqué del libro Camel de la primera edición, alrededor de 1992, y luego extendí, para cambiar el nombre de los archivos.

#!/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

He visto a personas mencionar un comando rename , pero no está disponible de manera rutinaria en los sistemas Unix (a diferencia de los sistemas Linux, por ejemplo, o Cygwin; en ambos casos, rename es un ejecutable en lugar de un guión). Esa versión de rename tiene una funcionalidad bastante limitada:

rename from to file ...

Reemplaza la parte de de los nombres de archivo con a , y el ejemplo dado en la página del manual es:

rename foo foo0 foo? foo??

Esto cambia el nombre de foo1 a foo01, y foo10 a foo010, etc.

Utilizo un script de Perl llamado rename , que originalmente saqué del libro Camel de la primera edición, alrededor de 1992, y luego extendí, para cambiar el nombre de los archivos.

<*>

Esto le permite escribir cualquier comando sustituto o transliterado de Perl para asignar nombres de archivos. En el ejemplo específico solicitado, usaría:

<*> || -l

He visto a personas mencionar un comando rename , pero no está disponible de manera rutinaria en los sistemas Unix (a diferencia de los sistemas Linux, por ejemplo, o Cygwin; en ambos casos, rename es un ejecutable en lugar de un guión). Esa versión de rename tiene una funcionalidad bastante limitada:

rename from to file ...

Reemplaza la parte de de los nombres de archivo con a , y el ejemplo dado en la página del manual es:

rename foo foo0 foo? foo??

Esto cambia el nombre de foo1 a foo01, y foo10 a foo010, etc.

Utilizo un script de Perl llamado rename , que originalmente saqué del libro Camel de la primera edición, alrededor de 1992, y luego extendí, para cambiar el nombre de los archivos.

<*>

Esto le permite escribir cualquier comando sustituto o transliterado de Perl para asignar nombres de archivos. En el ejemplo específico solicitado, usaría:

<*>) { my($was) =

He visto a personas mencionar un comando rename , pero no está disponible de manera rutinaria en los sistemas Unix (a diferencia de los sistemas Linux, por ejemplo, o Cygwin; en ambos casos, rename es un ejecutable en lugar de un guión). Esa versión de rename tiene una funcionalidad bastante limitada:

rename from to file ...

Reemplaza la parte de de los nombres de archivo con a , y el ejemplo dado en la página del manual es:

rename foo foo0 foo? foo??

Esto cambia el nombre de foo1 a foo01, y foo10 a foo010, etc.

Utilizo un script de Perl llamado rename , que originalmente saqué del libro Camel de la primera edición, alrededor de 1992, y luego extendí, para cambiar el nombre de los archivos.

<*>

Esto le permite escribir cualquier comando sustituto o transliterado de Perl para asignar nombres de archivos. En el ejemplo específico solicitado, usaría:

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

He visto a personas mencionar un comando rename , pero no está disponible de manera rutinaria en los sistemas Unix (a diferencia de los sistemas Linux, por ejemplo, o Cygwin; en ambos casos, rename es un ejecutable en lugar de un guión). Esa versión de rename tiene una funcionalidad bastante limitada:

rename from to file ...

Reemplaza la parte de de los nombres de archivo con a , y el ejemplo dado en la página del manual es:

rename foo foo0 foo? foo??

Esto cambia el nombre de foo1 a foo01, y foo10 a foo010, etc.

Utilizo un script de Perl llamado rename , que originalmente saqué del libro Camel de la primera edición, alrededor de 1992, y luego extendí, para cambiar el nombre de los archivos.

<*>

Esto le permite escribir cualquier comando sustituto o transliterado de Perl para asignar nombres de archivos. En el ejemplo específico solicitado, usaría:

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

He visto a personas mencionar un comando rename , pero no está disponible de manera rutinaria en los sistemas Unix (a diferencia de los sistemas Linux, por ejemplo, o Cygwin; en ambos casos, rename es un ejecutable en lugar de un guión). Esa versión de rename tiene una funcionalidad bastante limitada:

rename from to file ...

Reemplaza la parte de de los nombres de archivo con a , y el ejemplo dado en la página del manual es:

rename foo foo0 foo? foo??

Esto cambia el nombre de foo1 a foo01, y foo10 a foo010, etc.

Utilizo un script de Perl llamado rename , que originalmente saqué del libro Camel de la primera edición, alrededor de 1992, y luego extendí, para cambiar el nombre de los archivos.

<*>

Esto le permite escribir cualquier comando sustituto o transliterado de Perl para asignar nombres de archivos. En el ejemplo específico solicitado, usaría:

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

He visto a personas mencionar un comando rename , pero no está disponible de manera rutinaria en los sistemas Unix (a diferencia de los sistemas Linux, por ejemplo, o Cygwin; en ambos casos, rename es un ejecutable en lugar de un guión). Esa versión de rename tiene una funcionalidad bastante limitada:

rename from to file ...

Reemplaza la parte de de los nombres de archivo con a , y el ejemplo dado en la página del manual es:

rename foo foo0 foo? foo??

Esto cambia el nombre de foo1 a foo01, y foo10 a foo010, etc.

Utilizo un script de Perl llamado rename , que originalmente saqué del libro Camel de la primera edición, alrededor de 1992, y luego extendí, para cambiar el nombre de los archivos.

<*>

Esto le permite escribir cualquier comando sustituto o transliterado de Perl para asignar nombres de archivos. En el ejemplo específico solicitado, usaría:

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

He visto a personas mencionar un comando rename , pero no está disponible de manera rutinaria en los sistemas Unix (a diferencia de los sistemas Linux, por ejemplo, o Cygwin; en ambos casos, rename es un ejecutable en lugar de un guión). Esa versión de rename tiene una funcionalidad bastante limitada:

rename from to file ...

Reemplaza la parte de de los nombres de archivo con a , y el ejemplo dado en la página del manual es:

rename foo foo0 foo? foo??

Esto cambia el nombre de foo1 a foo01, y foo10 a foo010, etc.

Utilizo un script de Perl llamado rename , que originalmente saqué del libro Camel de la primera edición, alrededor de 1992, y luego extendí, para cambiar el nombre de los archivos.

<*>

Esto le permite escribir cualquier comando sustituto o transliterado de Perl para asignar nombres de archivos. En el ejemplo específico solicitado, usaría:

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

He visto a personas mencionar un comando rename , pero no está disponible de manera rutinaria en los sistemas Unix (a diferencia de los sistemas Linux, por ejemplo, o Cygwin; en ambos casos, rename es un ejecutable en lugar de un guión). Esa versión de rename tiene una funcionalidad bastante limitada:

rename from to file ...

Reemplaza la parte de de los nombres de archivo con a , y el ejemplo dado en la página del manual es:

rename foo foo0 foo? foo??

Esto cambia el nombre de foo1 a foo01, y foo10 a foo010, etc.

Utilizo un script de Perl llamado rename , que originalmente saqué del libro Camel de la primera edición, alrededor de 1992, y luego extendí, para cambiar el nombre de los archivos.

<*>

Esto le permite escribir cualquier comando sustituto o transliterado de Perl para asignar nombres de archivos. En el ejemplo específico solicitado, usaría:

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

He visto a personas mencionar un comando rename , pero no está disponible de manera rutinaria en los sistemas Unix (a diferencia de los sistemas Linux, por ejemplo, o Cygwin; en ambos casos, rename es un ejecutable en lugar de un guión). Esa versión de rename tiene una funcionalidad bastante limitada:

rename from to file ...

Reemplaza la parte de de los nombres de archivo con a , y el ejemplo dado en la página del manual es:

rename foo foo0 foo? foo??

Esto cambia el nombre de foo1 a foo01, y foo10 a foo010, etc.

Utilizo un script de Perl llamado rename , que originalmente saqué del libro Camel de la primera edición, alrededor de 1992, y luego extendí, para cambiar el nombre de los archivos.

<*>

Esto le permite escribir cualquier comando sustituto o transliterado de Perl para asignar nombres de archivos. En el ejemplo específico solicitado, usaría:

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

Esto le permite escribir cualquier comando sustituto o transliterado de Perl para asignar nombres de archivos. En el ejemplo específico solicitado, usaría:

<*>

La forma más fácil de cambiar el nombre de los archivos en el directorio es:

ls | xargs -I fileName mv fileName fileName.suffix

Si está abierto a una modificación, puede usar un sufijo en lugar de un prefijo. Luego, puede usar la tabulación completa para obtener el nombre del archivo original y agregar el sufijo.

De lo contrario, no, esto no es algo que sea compatible con el comando mv. Sin embargo, un simple script de shell podría hacer frente.

En mi caso, tengo un grupo de archivos que necesitan ser renombrados antes de poder trabajar con ellos. Cada archivo tiene su propio rol en grupo y tiene su propio patrón.

Como resultado, tengo una lista de comandos de cambio de nombre como este:

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

Pruebe esto también:

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

Esto producirá todas las combinaciones con prefijos y sufijos:

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

Otra forma de resolver el mismo problema es crear una matriz de mapeo y agregar el prefijo correspondiente para cada tipo de archivo como se muestra a continuación:

#!/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

Script de bash de archivos a granel renombrado

#!/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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top