【问题标题】:Rename multiple file names with bash shell使用 bash shell 重命名多个文件名
【发布时间】:2012-05-01 21:54:01
【问题描述】:

我们有错误的文件名,比如 file1@x2.png ,应该是 file1@2x~ipad.png。

不确定这是否适合我提出这个问题。如何编写简单的 bash shell 脚本将此类文件名从错误名称转换为预期名称。

【问题讨论】:

  • 你是说如果那部分不存在,你需要重命名一堆文件以在扩展名之前包含~ipad
  • How to do a mass rename? 的可能副本。通过搜索 [shell] rename file 还发现了 3000 多个其他问题。

标签: bash shell


【解决方案1】:

mv file1@x2.png file1@2x~ipad.png 您可以使用man mv 寻求帮助。

【讨论】:

  • 是的,可能有数百个。并且需要先找到它们,然后转换它们。
  • 所以位置不固定?这些文件没有分组在某个目录下?
【解决方案2】:

使用 bash,虽然这可以很容易地翻译成 sh/POSIX

for file in *; do
    [[ "$file" =~ @2x~ipad\.png$ ]] || mv "$file" "${file%@*}@2x~ipad.png"
done

如果文件不只是 pngs 则使用它(与扩展名无关),假设扩展名为 3 个字符。

for file in *; do
    [[ "$file" =~ @2x~ipad\.[[:alpha:]]{3}$ ]] || mv "$file" "${file%@*}@2x~ipad.${file##*.}"
done

如果这些文件未分组在某个目录下,则尝试在指定的根目录下递归 find 它们

while read -r file; do
    [[ "$file" =~ @2x~ipad\.[[:alpha:]]{3}$ ]] || mv "$file" "${file%@*}@2x~ipad.${file##*.}"
done < <(find /path/to/root/dir/to/look/under -type -f -name "*.png")

【讨论】:

  • 好答案。他还希望将x2 转换为2x,因此需要${file%x2.*}2x~ipad.${file##*.} 之类的内容。
  • 很好,在问题中没有看到。文件表格应该被清除。我不能继续猜测;)
【解决方案3】:

您不需要脚本;试试mmv:

mmv "*.png" "#1~ipad.png"

【讨论】:

    【解决方案4】:

    您可以使用prename(附带perl)轻松处理大量文件:

    prename 's/x2\.png/2x~ipad.png/' *.png
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-02
      • 2021-11-30
      • 1970-01-01
      • 2012-02-12
      • 2018-06-09
      • 2014-01-06
      • 2016-03-14
      • 2013-07-08
      相关资源
      最近更新 更多