我从来没有遇到过这个问题:我有一些数字编号的文件夹,因此我可以循环浏览文件,甚至使用并行化,而不必担心所有文件名完全不同。
在这种情况下,我将所有文件分成标记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 有关,当我命名目录时,我认为它是 1,然后是 0 而不是 10,但老实说我不知道如何修复它。有人有主意吗?
编辑:
显示 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
并将上述输出提供到您的问题中。我们将从那里拿走它。