使用序号重命名同名文件?

Renaming files with the same name using sequential numbers?

我觉得这很简单,但我遗漏了一些东西。我有 130 个文件夹,所有文件夹都包含相同的文件“Document.pdf”。当然,每个文件的内容各不相同,但它们都具有相同的名称和扩展名。我想要做的是让一个脚本获取所有这 130 个文件,并按顺序为它们命名从“1.pdf”到“130.pdf”。文件夹也按顺序排列 (1-130)。我在本地存储和 Google 驱动器上都有这些文件夹,因此任何涉及 bash 或 GS​​cripts 的解决方案都适合我。谢谢。

这应该可以解决问题:

代码:

function renameFiles() {
  var iter = 1;
  while (iter <= 130) {
    Logger.log(iter);
    var folders = DriveApp.getFoldersByName(iter);
    while (folders.hasNext()) {
      var folder = folders.next();
      Logger.log("Folder: " + folder.getName());
      var files = folder.getFilesByName("Document.pdf");
      while (files.hasNext()) {
        var file = files.next();
        file.setName(iter + "." + file.getMimeType().substr(-3));
        Logger.log("File: " + file.getName());
      }
    }
    iter++;
  }
}

假设:

  • 文件夹命名为 12、....130

示例输出:

假设目录实际上被命名为 12,以此类推直至并包括 130,这是一个 bash 解决方案:

# Edit this to desired path
parent_dir='.'

find "$parent_dir" -maxdepth 1 -type d | while read -r directory; do
    dir_name="$(basename directory)"

    if [ "$dir_name" -ge 1 ] && [ "$dir_name" -le 130 ]; then
        mv "$directory/Document.pdf" "$directory/$dir_name.pdf"
    fi
done

这使用 basename 获取每个目录的名称(即 1 到 130 之间的值),并使用它来重命名 Document.pdf 个文件。

请注意 -maxdepth 不是 POSIX。要将 -maxdepth 替换为 POSIX 选项,请参阅 this answer