Replicar um diretório e nomes de arquivos n vezes

2

Eu tenho pasta que tem alguns dados (arquivos) em que com o nome

201311261418

And a file 201311261418.eob

No meu cenário, eu preciso replicar essa pasta e os nomes dos arquivos n vezes com os números anexados da contagem.

Saída desejada, se necessário, para replicar 10 vezes:

2013112614181  
2013112614182  
2013112614183  
.  
.  
.  
20131126141810  

E para arquivos:

2013112614181.eob  
2013112614182.eob  
2013112614183.eob  
.  
.  
.  
20131126141810.eob  

Estou usando o ksh no AIX.

    
por Ram 02.12.2013 / 05:11

2 respostas

2

O script a seguir faz isso:

#!/bin/bash

INDIR=/path/to/where/your/file/is/stored
OUTDIR=/path/to/where/you/want/your/folders/to/be/created

# In the following line, 10 is the number of folders/files that will be created. -w means append a 0 before the numbers: 01 02 03 ... 10, instead of 1 2 3 ... 10. You can remove it if you want.

for i in 'seq -w 1 10'; do 
    mkdir ${OUTDIR}/201311261418${i}
    cp ${INDIR}/201311261418.eob ${OUTDIR}/201311261418${i}.eob
done
    
por 02.12.2013 / 05:41
0

Sua pergunta não é muito clara. Se bem entendi, você deseja criar várias cópias de um arquivo, adicionando um número no final do nome, mas preservando a extensão.

#!/bin/ksh
n=$1; shift
ret=0
for file; do
  # Decompose the file name to isolate the extension part
  dir=$(dirname -- "$file")
  file=$(basename -- "$file")
  base=${file%%.*}
  extension=${file#"$base"}
  # Make $n copies
  for ((i=1; i<=n; i++)); do
    cp -- "$dir/$base$extension" "$dir/$base$i$extension" || ret=1
  done
done
exit $ret

Uso (onde make-copies é o script acima):

make-copies 10 201311261418 201311261418.eob

Você pode adicionar um separador antes do número, por exemplo,

    cp -- "$dir/$base$extension" "$dir/$base-$i$extension" || ret=1

Se você deseja preencher o número com zeros para que eles tenham a mesma largura, altere o início do script para

#!/bin/ksh
n=$1; shift
start=1${n//?/0}
…

e substitua o loop interno por

  for ((i=$((start+1)); i<=$((start+n)); i++)); do
    cp -- "$dir/$base$extension" "$dir/$base${i#1}$extension" || ret=1
  done
    
por 03.12.2013 / 01:22