For 루프는 숫자로 표시된 디렉터리에서 작동하지 않습니다.

For 루프는 숫자로 표시된 디렉터리에서 작동하지 않습니다.

저는 이런 문제를 겪은 적이 없습니다. 숫자로 번호가 매겨진 폴더가 있어서 파일 이름이 완전히 다를까 걱정할 필요 없이 파일을 반복하거나 병렬화를 사용할 수도 있습니다.

이 경우 모든 파일을 sample_1레이블이 붙은 폴더 로 나누고 sample_18사용했습니다.매우 간단함for 루프:

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

1-9까지는 작동하지만 두 자리 숫자에서는 작동하지 않습니다. 실제로는 Sample_10 디렉토리가 존재하지 않는다는 오류가 발생합니다. bash와 관련이 있을 위험이 있습니다. 디렉토리 이름을 지정하면 10이 아닌 1이 되고 그 다음에는 0이 되는 것 같지만 솔직히 어떻게 고쳐야 할지 모르겠습니다. 누구든지 아이디어가 있나요?

편집하다:

ll 명령으로 생성된 내용을 표시합니다. 모든 디렉토리가 있습니다.

-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

생성된 오류는 샘플 10-18의 디렉터리를 찾을 수 없다는 것입니다.

hexdump에 의해 생성된 콘텐츠를 표시합니다 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

답변1

문제가 발생하면 수동으로 테스트하고, 단계별로 디버깅합니다.

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 ..

이라고 표시되면 sample_10 doesn't exist확인하세요.

답변2

어딘가에 논리에 문제가 있고 Sample_9에 중복된 파일이 있는 것 같습니다.이것이로 인해 명령이 실패하지만 댓글을 입력하기가 너무 번거롭고 오프라인 상태인 것 같아서 채팅에 초대할 수 없습니다. 다음을 시도해 보세요.

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

위의 결과를 질문에 제공하십시오. 우리는 거기에서 그것을 가져갈 것입니다.

관련 정보