Copiar arquivos sequenciais

3

Eu tenho 12 arquivos chamados dmp_000 , dmp_001 , etc, até dmp_011 . Eu gostaria de copiar todos eles para rdmp_000 , rdmp_001 , e assim por diante, sequencialmente, para que os arquivos numerados coincidam. Deve haver uma maneira fácil de fazer isso em vez de individualmente?

    
por Gary Cai 30.01.2013 / 05:01

5 respostas

4

Eu usei este comando para gerar alguns dados de amostra

% for  i in 'seq 0 11';do touch dmp_$(printf "%03d" $i);done

% ls
dmp_000  dmp_001  dmp_002  dmp_003  dmp_004  dmp_005  dmp_006  dmp_007  dmp_008  dmp_009  dmp_010  dmp_011

Para duplicar os arquivos e preservar os arquivos originais, modificar / criar datas:

% for i in dmp*;do cp -p "$i" "r${i}";done

% ls
dmp_000  dmp_002  dmp_004  dmp_006  dmp_008  dmp_010  rdmp_000  rdmp_002  rdmp_004  rdmp_006  rdmp_008  rdmp_010
dmp_001  dmp_003  dmp_005  dmp_007  dmp_009  dmp_011  rdmp_001  rdmp_003  rdmp_005  rdmp_007  rdmp_009  rdmp_011

Para mover os arquivos wdmp * para rdmp *

% for i in wdmp*;do newname=$(echo $i|sed 's/^w/r/'); mv "$i" "$newname";done

NOTA : Você também pode ter usado @ warl0ck's answer para isso usando o rename command.

    
por 30.01.2013 / 05:58
3

Se o uso de zsh for aceitável, então:

autoload -U zmv            # load zmv
zmv -C 'dmp_(*)' 'rdmp_$1' # rename files

Ou simplesmente neste caso:

zmv -C 'dmp_*' 'r$f'

( $1 , $2 expande para os grupos (...) correspondentes e $f para o caminho completo do arquivo).

Veja este link para mais exemplos.

    
por 30.01.2013 / 06:34
2

Compatível com Posix, curto, e todos os seus arquivos podem ser referenciados (dentro dos parênteses) como parâmetros posicionais 1-12, se você quiser expandi-lo.

% ( set -- wdmp0[0-1][0-9] ;\
> for f ; do cp $f r${f#?} ; done )
    
por 02.03.2014 / 09:35
1

Eu faria isso

for f in dmp_{000..011}; do [ -f $f ] && cp "$f" "r$f"; done
    
por 30.01.2013 / 23:54
0

Tente renomear o comando e renomeie os que foram iniciados com dmp_ ,

rename dmp rdmp dmp_*

Para manter os arquivos, tente um método alternativo como este,

for x in dmp_*; do cp $x r$x; done

    
por 30.01.2013 / 05:04