저는 이런 문제를 겪은 적이 없습니다. 숫자로 번호가 매겨진 폴더가 있어서 파일 이름이 완전히 다를까 걱정할 필요 없이 파일을 반복하거나 병렬화를 사용할 수도 있습니다.
이 경우 모든 파일을 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
위의 결과를 질문에 제공하십시오. 우리는 거기에서 그것을 가져갈 것입니다.