在我的Mac上,我在终端脚本中对文件夹中的某些文件进行了增量重命名。这些文件最后有一个数字,但从上到下的方法是顺序的:
foobar101.png
foobar107.png
foobar115.png
foobar121.png
foobar127.png
foobar133.png
foobar141.png
foobar145.png
foobar151.png
foobar155.png
当我创建并运行我的循环时,它可以工作:
DIR="/customlocation/on/mac"
add=1;
for thefile in $(find $DIR -name "*.png" ); do
cd $DIR
mv -v "${thefile}" foobar"${add}".png
((add++))
done
然而,当它运行增量时,它并不像预期的那样:
foobar101.png -> need foobar1.png but is foobar10.png
foobar107.png -> need foobar2.png but is foobar3.png
foobar115.png -> need foobar3.png but is foobar4.png
foobar121.png -> need foobar4.png but is foobar2.png
foobar127.png -> need foobar5.png but is foobar9.png
foobar133.png -> need foobar6.png but is foobar6.png
foobar141.png -> need foobar7.png but is foobar1.png
foobar145.png -> need foobar8.png but is foobar5.png
foobar151.png -> need foobar9.png but is foobar8.png
foobar155.png -> need foobar10.png but is foobar7.png
我试过在SO,Linux / Unix,Ask Ubuntu和SuperUser上搜索,但是我没有看到任何解决控制增量问题的问题,我不知道它是否特别适合我应该看看。那么如何控制最低数字/文件名的增量而不是Mac可能随机重命名,以便我得到所需的输出?
在Etan的comment之后,我在最后查看数值,有些文件名为foobarXXXX
,这就是问题所在。下面的答案虽然很棒,但我会研究一种新的方法,因为其他一些文件仍会产生相同的结果。如果我删除foobarXXXX
的所有文件,并且仅保留值foobarXXX
我的代码的文件,并且fedorqui的答案中的代码可以正常工作。有没有办法可以在循环过程中对此进行定位,还是我必须定位所有名称并测试以查看值的长度并进行相应调整?
答案 0 :(得分:3)
您不能依赖使用the order that the VFS gives them to it in的find
命令的顺序。
相反,您可能希望sort
:
DIR="/customlocation/on/mac"
add=1;
while IFS= read -r thefile; do
cd $DIR
mv -v "${thefile}" foobar"${add}".png
((add++))
done < <(find $DIR -name "*.png" | sort)
#-------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
请注意,这会使用process substitution,它会提供while
循环:
进程替换是一种重定向形式,其中输入或 进程的输出(某些命令序列)显示为临时的 文件。