重命名基于符号文件名

问题描述:

我有很多的文件(图片)这样的(文件名只从数字组成):重命名基于符号文件名

123456.jpg 
369258.jpg 
987123.jpg 
... 

我需要复印件各一份在其他文件夹(我们将其命名为输出)和重命名每个基于数字在他们的名字的文件,像这样的东西(在伪代码):

outputFileName = String(filename[0]) + String(filename[1]) + String(filename[2]+filename[3]) + ".jpg" 

因此,大家可以看到,重命名涉及获得一定的象征文件名,有时会得到文件中一些符号的总和名称。

我需要一个脚本来命名大众所有* .JPG这里我把剧本基于类似的算法的文件夹中,并输出我前面提到的输出文件夹改名的。

这个脚本应该可以通过cygwin shell从macos终端和windows上运行。

+1

即使是*规范*不明确! – devnull

+0

问题必须**表明对正在解决的问题的最小理解**。告诉我们你试图去做什么,为什么它没有工作,以及它应该如何工作。另请参阅:[堆栈溢出问题清单](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) – devnull

+0

你可以请更具体什么仍然不清楚? – Astro

我认为主要问题是:如何获得bash变量的特定字符以及如何在bash中执行加法。

  1. 要从bash变量中获取char,可以使用以下格式:${var:START_INDEX:LENGTH}

  2. 执行加法:$((ARG1 + ARG2))

你生成的脚本可能是这样的:

#!/bin/bash 

for f in *.jpg 
do 
    output=${f:0:1}${f:1:1}$((${f:2:1} + ${f:3:1})).jpg 
    mv -- "$f" "$output" 
done 
+0

非常感谢! – Astro

您正在寻找substring extraction

语法是${string:position:length},其中string是变量的名称,position是起始位置(0是第一个索引),length是子串的长度。

如问题规定,将创建的文件名,并复制它们名为“输入”到一个命名的文件夹文件夹中的脚本“输出”看起来是这样的:

#!/bin/bash 
for file in input/*.jpg 
do 
    filename="$(basename "$file")" 
    firstChar="${filename:0:1}" 
    secondChar="${filename:1:1}" 
    thirdAndFourthChar="$((${filename:2:1} + ${filename:3:1}))" 
    newfilename="$firstChar$secondChar$thirdAndFourthChar.jpg" 
    cp "$file" "output/$newfilename" 
done 
+0

非常感谢! – Astro