我浏览了其他主题,但我仍然做错了。我是bash的初学者,对不起,如果我问其他主题已经问过的话。 我的目的:更改为其添加数字的多个文件的名称。例如。: 我的文件:filexx.txt,fileyy.txt,filezz.txt 我想要的结果: test_name_1_filexx.txt,test_name_2_fileyy.txt,test_name_3_filezz.txt
到目前为止我所写的内容:
#!/bin/bash
COUNTER=1
MYSTRING=test_name_
for i in *.txt
do
mv "$i" "$(printf $MYSTRING $COUNTER '_' $i)"
COUNTER="$COUNTER"+1
done
以上基本上只留下目录中的最后一个文件,并将其命名为“test_name_”感谢您的帮助:)
答案 0 :(得分:4)
以下是重现问题的简便方法:
$ printf foo bar baz
foo
" bar"和" baz"被忽略了。这是因为printf
使用格式说明符和一些要替换的变量:
$ printf "%s, %s and %s" foo bar baz
foo, bar and baz
因为看起来你只想连接变量,所以根本没有必要使用printf
:
#!/bin/bash
counter=1
mystring=test_name_
for i in *.txt
do
mv "$i" "${mystring}${counter}_${i}"
counter=$((counter+1))
done
答案 1 :(得分:1)
使用GNU bash:
MYSTRING="test_name_"
c=1; for i in *.txt; do echo mv -v "$i" "${MYSTRING}$((c++))_$i"; done
如果输出看起来不错,请删除echo
。