Domanda

Come posso mv original.filename new.original.filename senza dover riscrivere il nome file originale?

Immagino di poter fare qualcosa come mv -p = new. original.filename o forse mv original.filename nuovo. ~ o altro - ma non riesco a vedere nulla del genere dopo aver visto man mv / info mv pagine

Certo, potrei scrivere uno script di shell per farlo, ma non esiste un comando / flag esistente per questo?

È stato utile?

Soluzione

In Bash e zsh puoi farlo con Brace Expansion . Questo semplicemente espande un elenco di elementi tra parentesi graffe. Ad esempio:

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

Quindi puoi fare la tua ridenominazione come segue:

mv {,new.}original.filename

poiché questo si espande in:

mv original.filename new.original.filename

Altri suggerimenti

È possibile utilizzare il comando rename (1):

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

Modifica: se la ridenominazione non è disponibile e devi rinominare più di un file, lo script di shell può essere davvero breve e semplice per questo. Ad esempio, per rinominare tutti .jpg in prefisso_ .jpg nella directory corrente:

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

È possibile ottenere una ridenominazione di file multipli compatibile con unix (usando i caratteri jolly) creando un ciclo for:

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

Ho visto persone menzionare un comando rinomina , ma non è di routine disponibile sui sistemi Unix (al contrario dei sistemi Linux, diciamo, o Cygwin - su entrambi i quali, rinominare è un eseguibile piuttosto che una sceneggiatura). Quella versione di rinomina ha una funzionalità abbastanza limitata:

rename from to file ...

Sostituisce la da parte dei nomi dei file con in , e l'esempio fornito nella pagina man è:

rename foo foo0 foo? foo??

Rinomina foo1 in foo01 e foo10 in foo010, ecc.

Uso uno script Perl chiamato rename , che ho originariamente estratto dal libro Camel della prima edizione, intorno al 1992, e poi esteso per rinominare i file.

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

Ho visto persone menzionare un comando rinomina , ma non è di routine disponibile sui sistemi Unix (al contrario dei sistemi Linux, diciamo, o Cygwin - su entrambi i quali, rinominare è un eseguibile piuttosto che una sceneggiatura). Quella versione di rinomina ha una funzionalità abbastanza limitata:

rename from to file ...

Sostituisce la da parte dei nomi dei file con in , e l'esempio fornito nella pagina man è:

rename foo foo0 foo? foo??

Rinomina foo1 in foo01 e foo10 in foo010, ecc.

Uso uno script Perl chiamato rename , che ho originariamente estratto dal libro Camel della prima edizione, intorno al 1992, e poi esteso per rinominare i file.

<*>

Ciò consente di scrivere qualsiasi comando sostitutivo Perl o traslitterare il comando per mappare i nomi dei file. Nell'esempio specifico richiesto, useresti:

<*> || -l

Ho visto persone menzionare un comando rinomina , ma non è di routine disponibile sui sistemi Unix (al contrario dei sistemi Linux, diciamo, o Cygwin - su entrambi i quali, rinominare è un eseguibile piuttosto che una sceneggiatura). Quella versione di rinomina ha una funzionalità abbastanza limitata:

rename from to file ...

Sostituisce la da parte dei nomi dei file con in , e l'esempio fornito nella pagina man è:

rename foo foo0 foo? foo??

Rinomina foo1 in foo01 e foo10 in foo010, ecc.

Uso uno script Perl chiamato rename , che ho originariamente estratto dal libro Camel della prima edizione, intorno al 1992, e poi esteso per rinominare i file.

<*>

Ciò consente di scrivere qualsiasi comando sostitutivo Perl o traslitterare il comando per mappare i nomi dei file. Nell'esempio specifico richiesto, useresti:

<*>) { my($was) =

Ho visto persone menzionare un comando rinomina , ma non è di routine disponibile sui sistemi Unix (al contrario dei sistemi Linux, diciamo, o Cygwin - su entrambi i quali, rinominare è un eseguibile piuttosto che una sceneggiatura). Quella versione di rinomina ha una funzionalità abbastanza limitata:

rename from to file ...

Sostituisce la da parte dei nomi dei file con in , e l'esempio fornito nella pagina man è:

rename foo foo0 foo? foo??

Rinomina foo1 in foo01 e foo10 in foo010, ecc.

Uso uno script Perl chiamato rename , che ho originariamente estratto dal libro Camel della prima edizione, intorno al 1992, e poi esteso per rinominare i file.

<*>

Ciò consente di scrivere qualsiasi comando sostitutivo Perl o traslitterare il comando per mappare i nomi dei file. Nell'esempio specifico richiesto, useresti:

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

Ho visto persone menzionare un comando rinomina , ma non è di routine disponibile sui sistemi Unix (al contrario dei sistemi Linux, diciamo, o Cygwin - su entrambi i quali, rinominare è un eseguibile piuttosto che una sceneggiatura). Quella versione di rinomina ha una funzionalità abbastanza limitata:

rename from to file ...

Sostituisce la da parte dei nomi dei file con in , e l'esempio fornito nella pagina man è:

rename foo foo0 foo? foo??

Rinomina foo1 in foo01 e foo10 in foo010, ecc.

Uso uno script Perl chiamato rename , che ho originariamente estratto dal libro Camel della prima edizione, intorno al 1992, e poi esteso per rinominare i file.

<*>

Ciò consente di scrivere qualsiasi comando sostitutivo Perl o traslitterare il comando per mappare i nomi dei file. Nell'esempio specifico richiesto, useresti:

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

Ho visto persone menzionare un comando rinomina , ma non è di routine disponibile sui sistemi Unix (al contrario dei sistemi Linux, diciamo, o Cygwin - su entrambi i quali, rinominare è un eseguibile piuttosto che una sceneggiatura). Quella versione di rinomina ha una funzionalità abbastanza limitata:

rename from to file ...

Sostituisce la da parte dei nomi dei file con in , e l'esempio fornito nella pagina man è:

rename foo foo0 foo? foo??

Rinomina foo1 in foo01 e foo10 in foo010, ecc.

Uso uno script Perl chiamato rename , che ho originariamente estratto dal libro Camel della prima edizione, intorno al 1992, e poi esteso per rinominare i file.

<*>

Ciò consente di scrivere qualsiasi comando sostitutivo Perl o traslitterare il comando per mappare i nomi dei file. Nell'esempio specifico richiesto, useresti:

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

Ho visto persone menzionare un comando rinomina , ma non è di routine disponibile sui sistemi Unix (al contrario dei sistemi Linux, diciamo, o Cygwin - su entrambi i quali, rinominare è un eseguibile piuttosto che una sceneggiatura). Quella versione di rinomina ha una funzionalità abbastanza limitata:

rename from to file ...

Sostituisce la da parte dei nomi dei file con in , e l'esempio fornito nella pagina man è:

rename foo foo0 foo? foo??

Rinomina foo1 in foo01 e foo10 in foo010, ecc.

Uso uno script Perl chiamato rename , che ho originariamente estratto dal libro Camel della prima edizione, intorno al 1992, e poi esteso per rinominare i file.

<*>

Ciò consente di scrivere qualsiasi comando sostitutivo Perl o traslitterare il comando per mappare i nomi dei file. Nell'esempio specifico richiesto, useresti:

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

Ho visto persone menzionare un comando rinomina , ma non è di routine disponibile sui sistemi Unix (al contrario dei sistemi Linux, diciamo, o Cygwin - su entrambi i quali, rinominare è un eseguibile piuttosto che una sceneggiatura). Quella versione di rinomina ha una funzionalità abbastanza limitata:

rename from to file ...

Sostituisce la da parte dei nomi dei file con in , e l'esempio fornito nella pagina man è:

rename foo foo0 foo? foo??

Rinomina foo1 in foo01 e foo10 in foo010, ecc.

Uso uno script Perl chiamato rename , che ho originariamente estratto dal libro Camel della prima edizione, intorno al 1992, e poi esteso per rinominare i file.

<*>

Ciò consente di scrivere qualsiasi comando sostitutivo Perl o traslitterare il comando per mappare i nomi dei file. Nell'esempio specifico richiesto, useresti:

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

Ho visto persone menzionare un comando rinomina , ma non è di routine disponibile sui sistemi Unix (al contrario dei sistemi Linux, diciamo, o Cygwin - su entrambi i quali, rinominare è un eseguibile piuttosto che una sceneggiatura). Quella versione di rinomina ha una funzionalità abbastanza limitata:

rename from to file ...

Sostituisce la da parte dei nomi dei file con in , e l'esempio fornito nella pagina man è:

rename foo foo0 foo? foo??

Rinomina foo1 in foo01 e foo10 in foo010, ecc.

Uso uno script Perl chiamato rename , che ho originariamente estratto dal libro Camel della prima edizione, intorno al 1992, e poi esteso per rinominare i file.

<*>

Ciò consente di scrivere qualsiasi comando sostitutivo Perl o traslitterare il comando per mappare i nomi dei file. Nell'esempio specifico richiesto, useresti:

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

Ho visto persone menzionare un comando rinomina , ma non è di routine disponibile sui sistemi Unix (al contrario dei sistemi Linux, diciamo, o Cygwin - su entrambi i quali, rinominare è un eseguibile piuttosto che una sceneggiatura). Quella versione di rinomina ha una funzionalità abbastanza limitata:

rename from to file ...

Sostituisce la da parte dei nomi dei file con in , e l'esempio fornito nella pagina man è:

rename foo foo0 foo? foo??

Rinomina foo1 in foo01 e foo10 in foo010, ecc.

Uso uno script Perl chiamato rename , che ho originariamente estratto dal libro Camel della prima edizione, intorno al 1992, e poi esteso per rinominare i file.

<*>

Ciò consente di scrivere qualsiasi comando sostitutivo Perl o traslitterare il comando per mappare i nomi dei file. Nell'esempio specifico richiesto, useresti:

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

Ciò consente di scrivere qualsiasi comando sostitutivo Perl o traslitterare il comando per mappare i nomi dei file. Nell'esempio specifico richiesto, useresti:

<*>

Il modo più semplice per rinominare i file in blocco nella directory è:

ls | xargs -I fileName mv fileName fileName.suffix

Se è aperto a una modifica, è possibile utilizzare un suffisso anziché un prefisso. Quindi è possibile utilizzare il completamento con tabulazione per ottenere il nome file originale e aggiungere il suffisso.

Altrimenti, no, questo non è qualcosa che è supportato dal comando mv. Un semplice script di shell potrebbe farcela.

Nel mio caso ho un gruppo di file che deve essere rinominato prima di poter lavorare con loro. Ogni file ha il suo ruolo nel gruppo e ha il suo modello.

Come risultato ho un elenco di comandi di rinomina come questo:

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

Prova anche questo:

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

Questo produrrà tutte le combinazioni con prefissi e suffissi:

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

Un altro modo per risolvere lo stesso problema è creare un array di mappatura e aggiungere il prefisso corrispondente per ciascun tipo di file come mostrato di seguito:

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

Bulk rename file bash script

#!/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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top