Bash 脚本帮助 - 附加序列号

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_,例如。

只有一个问题 - 如何在新文件名后附加数字?就结果而言,提取文件名中的现有数字或生成新数字都可以,但哪种方法更好/更容易,我将如何实现这一目标?

Zan*_*nna 8

只需告诉它从哪里开始,您就可以让 bash 为您计数,如下所示:

$ n=0
$ echo $((++n))
1
$ echo $((++n))
2
$ echo $((++n))
3
Run Code Online (Sandbox Code Playgroud)

您可以使用printf %03d格式化的结果$((++n))001 002 003010011等,更精确的排序。此外,没有点设置-_变量,因为它们不会改变。你的功能可能是这样的:

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)

但是renameUbuntu 中已经有一个有用的命令,因此您可能需要使用不同的名称 :)

  • 仅供参考,函数名称优先于二进制名称和别名名称,所以您是对的 - OP 可能想要使用不同的名称,但这不是必需的。 (2认同)

jii*_*ezz 3

据我了解,您只想在末尾添加连续数字。我个人会这样做

 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 脚本知识,这很容易理解

希望这可以帮助!