2013-10-22 420 views
0

我需要一些帮助完成脚本以将文件夹文件依次重命名为文件夹名称。我原以为这是一种常见的行为,但我似乎无法找到我在搜索后究竟在寻找什么。我发现了一些可以按顺序重命名文件的工具,但我想将文件夹或目录名追加到文件的前面。批量重命名文件以包含linux中的文件夹/目录名称

#!/bin/bash 
a=1 
for i in *.jpg; do 
    new=$(printf "%04d.jpg" ${a}) #04 pad to length of 4 
    mv ${i} ${new} 
    let a=a+1 
done 

所以我想这些文件夹和文件:

~/tmp/6856u56u56.jpg 
~/tmp/7567787.jpg 

~/tmp2/46u65h5hh.jpg 
~/tmp2/b656hy6hjh.jpg 

的样子:

~/tmp/UG-tmp-001.jpg 
~/tmp/UG-tmp-002.jpg 

~/tmp2/UG-tmp2-001.jpg 
~/tmp2/UG-tmp2-002.jpg 

~/tmp/(text)-(directory name)-(sequential numbering).(extension) 

运行脚本之后。

任何人都可以帮我吗?另外,文件不一定是.jpg,文件夹名称中可能有空格。如果这是一个问题,请让我知道。这是使用bash脚本的Linux。如果它运行良好,我可能会尝试将它集成到文件管理器的右键单击中。提前致谢!

回答

0

看预期的结果,此代码应工作

#!/bin/bash 
a=1 
result=$(printf '%s\n' "${PWD##*/}") 
echo $result 
filename="text-$result-" #replace text with what you need 
for i in *.jpg; do 
    newfilename="$filename$a.jpg" # since the extension is does not change you can hardcode it 
    echo $newfilename 
    mv ${i} ${newfilename} 
    let a=a+1 
done 
+0

我错过了扩展可以在你的问题改变的一部分,你可以很容易地获取该文件的扩展名在一个变量并追加它指的http:/ /stackoverflow.com/questions/965053/extract-filename-and-extension-in-bash – girish

+0

谢谢!我收到了一个错误,尽管当我尝试自己弄明白这件事时,那个错误让我感到困惑,但它必须是特定的发行版或其他东西。我在opensuse上,我得到一个“mv:target”blah-12.jpg'不是目录“错误信息。你知道如何解决这个问题吗?谢谢你的帮助! – user2905513

+0

更新:我找到了一个搜索后,我在脚本之前添加了“IFS =''”,它修复了文件名问题中的空格。我真的希望它在编号时显示为零,而不是像0001那样。我会尝试自己弄清楚它,但是如果你知道如何解决这个问题并且不介意,我将不胜感激!谢谢! – user2905513

相关问题