批量重命名文件以包含linux中的文件夹/目录名称

时间:2013-10-22 04:37:30

标签: linux bash batch-file rename

我需要一些帮助来完成一个脚本,将文件夹文件按顺序重命名为文件夹名称。我本以为这是一个常见的动作,但我似乎无法找到我搜索后正在寻找的东西。我找到了一些可以顺序重命名文件的东西,但我想将文件夹或目录名称附加到文件的前面。

#!/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。如果它运行良好,我可能会尝试将其集成到文件管理器的右键单击中。提前谢谢!

1 个答案:

答案 0 :(得分: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