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

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

最佳答案

从预期结果来看,这段代码应该可以工作

#!/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

关于linux - 批量重命名文件以包含Linux中的文件夹/目录名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19509065/

相关文章:

ios - 如何从终端(osascript)设置文件夹操作?

Windows 批量自动应答 XCOPY/i

java - 确保 .Bat 窗口关闭并且整个 Java 程序在完成后停止运行

linux - Bash 变量冲突

python - 使用 python superprocess.call 方法时出错,

php - 相当于 PHP 的 preg_replace() 的 Shell

bash - 如何在 TRAP ... RETURN 中获取返回码?

powershell - 启动 PowerShell 时获取 bat 文件以继续

linux - Centos命令行编辑CSV文件

c - 在 C 程序中获取 shell 脚本的退出代码