我试过这个:
#!/bin/bash
# addsuffix <suffix> <files>
suffix=$1
shift
for f in "$@"
do
extension=${f##*.}
if [ -z $extension ]; then
mv "$f" "$f$suffix"
else
mv "$f" "${f%.$extension}$suffix.$extension"
fi
done
通过此命令,其中 add_suffix 是前一个文件的名称
sh add_suffix
但我收到错误:
add_suffix: 5: shift: can't shift that many
怎么了?
答案1
我正在回答主题中的问题,而不是帖子末尾关于 shell 脚本出了什么问题的问题。
如果您愿意在 shell 脚本之外执行此操作,则 mmv 命令即可执行此操作。
me@elman:~/test$ ls
file1 file1.out file2
me@elman:~/test$ mmv -n "*" "#1.newsuffix"
file1 -> file1.newsuffix
file1.out -> file1.out.newsuffix
file2 -> file2.newsuffix
'-n' 告诉 mmv 显示要做什么,但不真正执行(空运行)。第二个参数(“*”)告诉 mmv 要更改哪些文件(源)。您可以有更复杂的匹配模式,但此命令应该获取目录中的所有非隐藏文件。在最后一个参数“#1.newsuffix”(目标)中,#1 引用源规范中的第一个通配符匹配并将其复制到新名称。
删除“-n”以真正进行更改。手册页非常好。