Ubuntu - 使用用户输入的顺序文件命名



我正在尝试创建一个用于重命名图像序列的自定义命令。

我正在学习视觉效果,有时必须按顺序重命名文件。

我想导航到保存图像的目录,调用命令,收到输入文件名前缀(EG.{PREFIX}_%04d.png(,并在输入所述前缀后执行命令。

现在我从另一篇文章中知道我可以通过以下方式按顺序重命名文件:

for i in *.jpg; do
p=$(printf "USERINPUTHERE_%04d.jpg" ${n})
mv ${i} ${p}
let n=n+1
done

但我不确定在完全执行之前如何或是否可以输入命令请求。

$ cat cmd.sh 
#!/bin/bash
create_file()
{
echo hello > "$1"
echo "created $1"
}
format()
{
printf "%s_%04d.jpg" "$1" "$2"
}
read -p "enter prefix: " PREFIX
i=1
FILE="$(format "$PREFIX" "$i")"
while [ -e "$FILE" ]; do
((i++))
FILE="$(format "$PREFIX" "$i")"
done
create_file "$FILE"
$ ./cmd.sh 
enter prefix: hello
created hello_0001.jpg
$ ./cmd.sh 
enter prefix: hello
created hello_0002.jpg
$ ./cmd.sh
enter prefix: world
created world_0001.jpg
$ ./cmd.sh
enter prefix: hello
created hello_0003.jpg
$ ls *.jpg
hello_0001.jpg  hello_0002.jpg  hello_0003.jpg  world_0001.jpg

您可以create_file()做任何您需要的事情,并format()您喜欢的方式格式化文件名。

另请注意,这是一个非常欠优化的实现。如果您计划拥有许多文件,那么最好记住每个前缀的最后创建文件。

综上所述,接受文件名作为参数而不是提示它会更有用,因为这样您就可以轻松地在脚本中使用您的命令。

最新更新