Para loop não funcionando com diretórios numericamente rotulados [closed]

1

Eu nunca tive esse problema: Eu tenho algumas pastas numeradas numericamente para que eu possa percorrer os arquivos ou até mesmo usar a paralelização sem me preocupar com todos os nomes de arquivos sendo totalmente diferentes.

Neste caso, separei todos os meus arquivos em pastas com o rótulo sample_1 to sample_18 e usei um super simples para loop:

for i in {1..18};
do
  cd sample_${i}
  mv *.fa sample_${i}.fa
  mv *.gff sample_${i}.gff
  mv *.bam sample_${i}.bam
  mv *.sam sample_${i}.sam
  cd ..
done

Funciona bem para 1-9 e depois não funciona nos dois dígitos. Ele literalmente dará o erro de que o diretório sample_10 não existe. Eu arrisquei que tinha algo a ver com bash pensando que era 1 e, em seguida, 0 em vez de 10, quando eu nomeei os diretórios, mas eu sinceramente não sei como consertá-lo. Alguém tem alguma ideia?

Editar:

Mostrando o que um comando ll produz. Todos os diretórios estão lá.

-rw-rw---- 1 anm5579 mls164_collab  644 Sep 18 11:18 contentsInfo
-rw-rw---- 1 anm5579 mls164_collab   44 Sep 27 16:07 fixdata.sh
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 27 15:59 sample_1
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 21 17:08 sample_10
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 18 10:59 sample_11
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 20 11:11 sample_12
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 21 17:12 sample_13
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 18 11:12 sample_14
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 18 11:11 sample_15
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 21 10:40 sample_16
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 20 11:08 sample_17
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 18 11:11 sample_18
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 27 15:59 sample_2
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 27 15:59 sample_3
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 27 15:59 sample_4
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 27 15:59 sample_5
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 27 15:59 sample_6
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 27 15:59 sample_7
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 27 15:59 sample_8
drwxrws--- 2 anm5579 mls164_collab 4096 Sep 27 15:59 sample_9

Erro produzido é apenas nenhum diretório encontrado para amostras 10-18.

Mostrando o que o hexdump produz com: echo sample_* | hexdump -C :

00000000  73 61 6d 70 6c 65 5f 31  20 73 61 6d 70 6c 65 5f  |sample_1 sample_|
00000010  31 30 20 73 61 6d 70 6c  65 5f 31 31 20 73 61 6d  |10 sample_11 sam|
00000020  70 6c 65 5f 31 32 20 73  61 6d 70 6c 65 5f 31 33  |ple_12 sample_13|
00000030  20 73 61 6d 70 6c 65 5f  31 34 20 73 61 6d 70 6c  | sample_14 sampl|
00000040  65 5f 31 35 20 73 61 6d  70 6c 65 5f 31 36 20 73  |e_15 sample_16 s|
00000050  61 6d 70 6c 65 5f 31 37  20 73 61 6d 70 6c 65 5f  |ample_17 sample_|
00000060  31 38 20 73 61 6d 70 6c  65 5f 32 20 73 61 6d 70  |18 sample_2 samp|
00000070  6c 65 5f 33 20 73 61 6d  70 6c 65 5f 34 20 73 61  |le_3 sample_4 sa|
00000080  6d 70 6c 65 5f 35 20 73  61 6d 70 6c 65 5f 36 20  |mple_5 sample_6 |
00000090  73 61 6d 70 6c 65 5f 37  20 73 61 6d 70 6c 65 5f  |sample_7 sample_|
000000a0  38 20 73 61 6d 70 6c 65  5f 39 0a                 |8 sample_9.|
000000ab
    
por Lexi 27.09.2018 / 22:19

2 respostas

2

Teste manualmente, passo a passo, a depuração quando encontrar problemas.

i=10
cd sample_${i}
mv *.fa sample_${i}.fa
mv *.gff sample_${i}.gff
mv *.bam sample_${i}.bam
mv *.sam sample_${i}.sam
cd ..

Se ele diz sample_10 doesn't exist , verifique.

    
por 27.09.2018 / 22:44
1

Eu acho que sua lógica está com defeito em algum lugar e que você tem um arquivo duplicado em Sample_9 e que isto é o que faz o comando falhar, mas isso é muito complicado para digitar um comentário e você parece para estar off-line, por isso não posso convidá-lo para o chat, tente isto:

#!/bin/bash
set -x
for i in {1..18};
do
  (
    cd "sample_${i}"
    pwd
  )
done

e forneça a saída dos itens acima em sua pergunta. Nós vamos levá-lo de lá.

    
por 27.09.2018 / 23:44