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までは機能しますが、2桁の数字では機能しません。実際には、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

上記の結果を質問に入力してください。私たちはそこからそれを取ります。

関連情報