aro*_*ath 6 command-line bash scripts
我对 bash 脚本很陌生,希望有人能帮助我。
我有包含图像命名的文件夹,如下所示:
file_001.jpeg
file_002.jpeg
file_003.jpeg
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个带有两个参数并重命名文件的 bash 函数,如下所示:
photo-argument1-argument2_001.jpeg
Run Code Online (Sandbox Code Playgroud)
例如
photo-christmas-2014_001.jpeg
Run Code Online (Sandbox Code Playgroud)
这是我所拥有的:
function rename () {
title="photo"
h="-"
u="_"
new=$title$h$1$h$2$u
for file in *.jpeg; do
mv -v "$file" "$new"
done
}
Run Code Online (Sandbox Code Playgroud)
所以运行rename birthday 2015
产生photo-birthday-2015_
,例如。
只有一个问题 - 如何在新文件名后附加数字?就结果而言,提取文件名中的现有数字或生成新数字都可以,但哪种方法更好/更容易,我将如何实现这一目标?
只需告诉它从哪里开始,您就可以让 bash 为您计数,如下所示:
$ n=0
$ echo $((++n))
1
$ echo $((++n))
2
$ echo $((++n))
3
Run Code Online (Sandbox Code Playgroud)
您可以使用printf %03d
格式化的结果$((++n))
为001
002
003
和010
,011
等,更精确的排序。此外,没有点设置-
和_
变量,因为它们不会改变。你的功能可能是这样的:
function rename () {
title="photo"
n=0
for file in *.jpeg; do
printf -v new "$title-$1-$2_%03d.jpeg" "$((++n))"
mv -v -- "$file" "$new"
done
}
Run Code Online (Sandbox Code Playgroud)
这样做:
$ rename birthday 2015
'file_001.jpeg' -> 'photo-birthday-2015_001.jpeg'
'file_002.jpeg' -> 'photo-birthday-2015_002.jpeg'
'file_003.jpeg' -> 'photo-birthday-2015_003.jpeg'
Run Code Online (Sandbox Code Playgroud)
但是rename
Ubuntu 中已经有一个有用的命令,因此您可能需要使用不同的名称 :)
据我了解,您只想在末尾添加连续数字。我个人会这样做
function rename () {
count=1 #The first photo will get number 1 to the end
title="photo"
h="-"
u="_"
new=$title$h$1$h$2$u
for file in *.jpeg; do
if [ $count -lt 10 ]; then
mv -v "$file" "${new}00$count" #numbers 1-9 will be like 001 002..
elif [ $count -lt 100 ]; then
mv -v "$file" "${new}0$count" #numbers 10-99 like 022 056 etc..
else
mv -v "$file" "$new$count"
fi
count=$[ $count + 1 ] #count variable gets bigger by one
done
}
Run Code Online (Sandbox Code Playgroud)
当文件被重命名时,它们将获得连续的编号,并在末尾填充。这可以像其他答案中所示的那样以不同的方式完成,但我发现如果一个人没有很好的 bash 脚本知识,这很容易理解
希望这可以帮助!