Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu-用户输入的顺序文件命名_Ubuntu_Unix_Input_Terminal_Filenames - Fatal编程技术网

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

Ubuntu-用户输入的顺序文件命名,ubuntu,unix,input,terminal,filenames,Ubuntu,Unix,Input,Terminal,Filenames,我正在尝试创建一个用于重命名图像序列的自定义命令 我正在研究视觉效果,有时不得不按顺序重命名文件 我想导航到保存图像的目录,调用该命令,收到输入文件名前缀的提示(例如{prefix}u%04d.png),并在输入前缀后执行该命令 现在我从另一篇文章中了解到,我可以通过以下方式按顺序重命名文件: for i in *.jpg; do p=$(printf "USERINPUTHERE_%04d.jpg" ${n}) mv ${i} ${p} let n=n+1 done

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

我正在研究视觉效果,有时不得不按顺序重命名文件

我想导航到保存图像的目录,调用该命令,收到输入文件名前缀的提示(例如{prefix}u%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()
按照您的意愿格式化文件名

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


尽管如此,接受文件名作为参数而不是提示输入文件名会更有用,因为这样您就可以轻松地在脚本中使用命令。

。是,当处理100多幅图像的序列时,欠优化选项不起作用。作为参数的文件名听起来像是我想要的方式。那么,让参数先创建前缀,然后调用命令的其余部分,将顺序编号添加到每个文件中的想法是什么呢?是的。实际上,只需将行
read-p“enter prefix:”prefix
替换为
prefix=“$1”