Como posso preencher muitos nomes de arquivos com zeros em um diretório?

3

Acabei de escrever um script que gerou centenas de arquivos e os armazenou em um diretório ~/foo . Esses arquivos são ~/foo/X-file , em que X varia de X=1 a X=900 . Meu problema é que eu gostaria de ver esses arquivos em ordem numérica, mas os arquivos não são preenchidos com zeros. Portanto, o diretório contém 17-file e 544-file , por exemplo. Existe uma maneira de preencher esses arquivos com zeros à esquerda?

    
por Brian Fitzpatrick 22.10.2015 / 00:00

4 respostas

5

cd ~/foo
for i in *-file; do
    num=${i%-file}
    padnum=$(printf '%03d' $num)
    mv -v "$i" "${padnum}-file"
done

Algo ao longo destas linhas deve fazê-lo. Modifique conforme necessário para padrões e diretórios precisos.

    
por 22.10.2015 / 00:07
4

Se você tiver o utilitário Perl rename (geralmente chamado de prename , não o mais primitivo do Linux):

rename -v 's/^([0-9]-)/00$1/; s/^([0-9]{2}-)/0$1/' *-file
  • A primeira expressão regular substitui dígitos únicos por dois zeros (2- > 002)
  • O segundo substitui dois dígitos por um zero (33- > 033)
por 22.10.2015 / 00:14
0

My problem is that I would like to view these files in numerical order

Teste ls -v (claro que você também pode combiná-lo com outras opções de que você gosta, como ls -lv para obter listagens longas).

De ls (1) :

   -v     natural sort of (version) numbers within text

Exemplo:

$ ls
1  10  11  2  20  21  3  30  31
$ ls -v
1  2  3  10  11  20  21  30  31
$ 
    
por 22.10.2015 / 20:30
-1

O seguinte deve funcionar no bash se for executado no diretório que você gosta.

for x in [0-9]*-file ; do mv $x 'printf %03d-%s ${x%-*} ${x##*-}' ; done
    
por 22.10.2015 / 00:13

Tags