mv arquivos em pastas com base na numeração em nomes

0

Eu tenho 30 pastas:

s-01
s-02
...
s-30

E eu tenho 30 arquivos:

txtFile-001
txtFile-002
...
txtFile-030

Como posso executar a seguinte operação em um único tiro

mv txtFile-001 s-01/txtFile
mv txtFile-002 s-02/txtFile
...
mv txtFile-030 s-30/txtFile
    
por WanderingMind 08.09.2015 / 16:32

2 respostas

3

Com um loop for:

for i in $(seq -w 1 30); do mv -v "txtFile-0${i}" "s-${i}/txtFile"; done

Isso passa de 01 a 30 e chama todo número no comando mv , em que $i contém o número.

Editar: sem seq , ele faria um loop como:

for i in {01..30}; do mv -v "txtFile-0${i}" "s-${i}/txtFile"; done
    
por 08.09.2015 / 16:43
1

Em um tiro?

prename 's!txtFile-0(..)$!s-$1/txtFile!' txtFile*

Isso usa uma expressão regular para dividir os dois dígitos finais de txtFile-0nn e usá-lo como o sufixo do diretório.

    
por 08.09.2015 / 17:18