Bash 我的列表命名代码有什么问题?
我想将文件名从Bash 我的列表命名代码有什么问题?,bash,filenames,long-filenames,short-filenames,Bash,Filenames,Long Filenames,Short Filenames,我想将文件名从Sub****\u Ses1更改为HU\u TT\u 12.****\u (****编号从0001到1600) 我做了下面的工作 #!/bin/sh #Change file name Subj_id=/Users/dave/biomark/dat cd Subj_id for abcd in Sub****_Ses1; do mv Sub$a$b$c$d_Ses1 HU_TT_12_$a$b$c$d_UU; done for和通配符不是这样工作的。用于提取数字 $
Sub****\u Ses1
更改为HU\u TT\u 12.****\u代码>
(****编号从0001到1600)
我做了下面的工作
#!/bin/sh
#Change file name
Subj_id=/Users/dave/biomark/dat
cd Subj_id
for abcd in Sub****_Ses1; do
mv Sub$a$b$c$d_Ses1 HU_TT_12_$a$b$c$d_UU;
done
for
和通配符不是这样工作的。用于提取数字
$ touch Sub000{1,2,3,4}_Ses1
$ for f in Sub????_Ses1
do
abcd=$(echo $f | cut -b4-7)
mv $f HU_TT_12_${abcd}_UU
done
$ ls HU_TT_12_000*
HU_TT_12_0001_UU HU_TT_12_0002_UU HU_TT_12_0003_UU HU_TT_12_0004_UU
您可以使用sed和mv
#!/bin/bash
set -x
Subj_id=/Users/dave/biomark/dat
cd $Subj_id
for i in Sub*_Ses1 ; do
#echo $i|sed -r 's/^.*\([[:digit:]]{4}\).*/HU_TT_12_\1_UU/'
mv $i $(echo $i|sed -rn 's/^.*([[:digit:]]{4}).*/HU_TT_12_\1_UU/ p')
done
我有1600个文件。我是不是应该做HU_-TT_12_0001_-HU_-TT_12_0002_-HU_-TT_12_0003_-HU_-TT_12_0004_直到HU_-TT_12_1600_??!或者这对所有人都有效?还有,你刚才说了什么?最后一个数字($ls HU_TT_12_000*)?我不明白。通配符Sub???\u Ses1
将匹配所有这些文件。你不必说出他们的名字。我想知道你为什么加上这个?我不知道。我的示例中的第一个bash命令(touch…
)就是创建我要移动的四个文件。第三个bash命令(ls HU_TT_12_000*
)用于验证所有操作是否正常。您的问题的答案是第二个bash命令,该命令从f in…
开始,结束于done
。在你的档案上试试这些。对不起,我不能给你投票,因为我是个笨蛋!(我需要15个什么样的人才能做到!)我为没有投票给帮助我的人而感到难过……对不起!没问题。。。当你有足够的声誉时,你可以投票。你好,帮帮我!欢迎来到SO!你问了一个正确的问题。看到你对答案的评论,向上投票是为了找到有用和好的答案。它们不能用来表示感激(除非答案是好的)。请阅读上的帮助文章。谢谢。答案是有帮助的,并希望提高投票率。我会等到我有足够的名声。