【发布时间】:2012-05-19 18:14:48
【问题描述】:
我知道有人问过这个问题,但我找不到一个以上的解决方案,而且它对我不起作用。本质上,我正在寻找一个 bash 脚本,该脚本将采用如下所示的文件列表:
image1.jpg
image2.jpg
image3.jpg
然后复制每个副本,但按顺序倒序编号。因此,该序列将创建三个新文件,分别是:
image4.jpg
image5.jpg
image6.jpg
然而,image4.jpg 将是 image3.jpg 的未修改副本,而 image5.jpg 将是 image2.jpg 的未修改副本,依此类推。我已经尝试过this stackoverflow question 中列出的解决方案,但没有成功。诚然,我在 bash 脚本路径中的位置不是很远,如果我在第一个列出的答案中获取代码块并制作一个脚本,我总是会一遍又一遍地得到“2:语法错误:”(“意外”。我'我尝试用 ( 改变语法,但没有成功。所以,要么我做错了,要么有更好的脚本。
很抱歉没有早点发布,但我使用的代码是:
image=( image*.jpg )
MAX=${#image[*]}
for i in ${image[*]}
do
num=${i:5:3} # grab the digits
compliment=$(printf '%03d' $(echo $MAX-$num | bc))
ln $i copy_of_image$compliment.jpg
done
我正在使用此代码并将其粘贴到带有 nano 的文件中,并添加 !#/bin/bash 作为第一行,然后添加 chmod +x script 并通过 sh script 在 bash 中执行。当然,在我的测试运行中,我使用了适当标题为 image1.jpg 的文件 - 但我也想知道如何将此脚本应用于 jpegs 目录,不一定标题为 image(integer).jpg - 在我的文件中保持结构,其中大部分是一个单词,后跟一个数字,然后是 .jpg,并且不必为每次使用都重写脚本。
【问题讨论】:
-
如果您不发布代码,我们将无法解决语法错误。请做。
-
感谢更新 数组语法是基础,确保文件顶部有
#!/bin/bash,否则你可能会得到sh(甚至csh,在某些平台上)。 -
仔细阅读,错误为
sh script;你想要bash script(或只是./script)。 -
嘿@triplee,非常感谢您的建议,但我仍然遇到错误。如果我在一个空目录中尝试,在发出
touch image1.jpg(再次发出2和3)然后bash script之后,我在第一行得到(standard_in) 1: syntax error的输出,然后ln: creating hard link 'copy_of_image000.jpg': File exists和这些行重复,在脚本顶部有和没有#!/bin/bash。然后,ls将仅显示 image(interger).jpg 文件和单个copy_of_image000.jpg。使用./具有相同的结果。 -
看起来您的索引没有正确更新。我没有尝试对这部分代码进行故障排除。