【问题标题】:Creating a batch file-renaming script for use in OSX Automator创建用于 OSX Automator 的批处理文件重命名脚本
【发布时间】:2016-04-22 21:21:17
【问题描述】:

提前道歉。在编程方面,我是一个完全的新手。我希望有人可以帮助我。

根据我的工作性质,我不得不不断地重命名一堆图像。文件名有时会有所不同,但通常是某种形式的时间数字,按顺序显示在它们自己的单独目录中(想想 image001.jpg 等,但并不总是那种命名格式)。无论如何,对于该单个目录中存在的每个 jpg 文件,我必须将这个特定目录中的所有文件重命名为“000-001.jpg”、“002-003.jpg”、“004-005.jpg”等.给定目录中通常有 10-999 张图像,但我很少得到一些包含 1000 多张图像的目录(在这种情况下,我开始将所有文件命名为“0000-0001.jpg”、“0002-0003.jpg”等.).

在过去的几年里,我一直在手动重命名可能数十万张这样的图像。现在我终于在寻找一种批量重命名它们的方法,这样我就不必浪费时间这样做了。似乎 OSX 上的 Automator 是最简单的方法,但 Automator 无法以我自己需要的方式重命名文件。

我确实注意到我可以使用 shell 脚本或 applescripts 作为 Automator 函数的一部分,所以我想知道是否有人愿意编写一个用于 Automator 的简短脚本(我使用 GUI 工作得更好)提供上述功能?不幸的是,我没有编写脚本的经验。对我来说,最理想的结果是在 Automator 应用程序中使用该脚本,然后将需要重命名的文件拖到它上面。这将绕过我打开 OSX 终端的需要,我对它的经验也为零。

作为补充说明,我使用的是运行 OSX 10.6.8 的旧笔记本电脑。我可能没有最新版本的 Applescript 等可供使用。如果有人愿意帮助我,我将不胜感激。谢谢!

-- 乙脑

【问题讨论】:

  • 在任何人可以编写任何代码来自动化任何过程之前,他们必须了解目标和规则,因此您需要解释您的命名系统是如何工作的。为什么每个文件的名称中都需要 2 个嵌入的数字?哪个文件获得哪个名称或任意分配它们是否重要?也有 GIF 和 PNG 吗?是否有任何目录(文件夹)依赖于其他任何目录?
  • 文件是书页的图像,每个文件两页。因此 000-001.jpg 用于第 0 页和第 1 页。哪些文件获得名称确实很重要,但文件始终处于正确的顺序,无论它们先前存在的文件名如何。例如,如果我有 image01.jpg、image02.jpg 等,那么 image01 已经是 000-001 等。这有帮助吗?这些文件通常是 JPG,如果不是,我可以手动重命名非 JPG 文件。据我所知,没有目录依赖于任何其他目录。我只想能够选择所有文件,将它们拖放到 Automator 应用程序上,然后重命名它们。
  • 是的。它只需要按字母顺序重命名第一个文件 000-001.jpg,第二个 002-003.jpg 等等。如果目录中有 1000 个或更多文件,则应以 0000-0001.jpg、0002-0003.jpg 等开头。就是这样。这些文件已经按照正确的字母顺序排列。

标签: macos applescript file-rename automator


【解决方案1】:

我会在bash shell 中这样做,因为我发现 Applescript 非常冗长!该脚本将所有错误消息写入桌面上名为“renamerLog.txt”的文件中。

您必须将单个文件夹放到图标上。

它将文件从指定目录复制,并按照您的要求重命名它们到您桌面上名为“Output”的目录(文件夹),在您开始之前该目录(文件夹)必须不存在 - 否则它会混淆来自不同的页面书。

Automator 中看起来像这样:

您可以从下面复制并粘贴实际脚本:

# Place where we will save messages
LOG="$HOME/Desktop/renamerLog.txt"

# Clear log from any previous run
> "$LOG"

# Set up name for output directory
OUT="$HOME/Desktop/Output"

# Check user dropped a directory, rather than files
if [ ! -d "$1" ]; then
   echo "ERROR: Please drop a DIRECTORY onto me!" >> "$LOG"
   exit 1
fi
echo "Processing files in: $1" >> "$LOG"

# Go to that directory
cd "$1"
if [ $? -ne 0 ]; then
   echo "ERROR: Unable to go to specified directory" >> "$LOG"
   exit 1
fi

# Create output directory
mkdir "$OUT"
if [ $? -ne 0 ]; then
   echo "ERROR: Unable to create output directory" >> "$LOG"
   exit 1
fi

# Don't barf if no files or upper or lower case
shopt -s nullglob
shopt -s nocaseglob

# Count files to determine number of leading zeroes required
for f in *.jpg; do
   ((nfiles++))
done

# Tell user how many files we found and set up output formattiing
echo "Files: $nfiles" >> "$LOG"
format="$OUT/%03d-%03d.jpg"
[ $nfiles -gt 999 ] && format="$OUT/%04d-%04d.jpg"      # Maybe this should be "-gt 499" rather than "-gt 999"

# Now copy the files renaming them as we go
i=0
j=1
for f in *.jpg; do
   newname=$(printf $format $i $j)
   ((i+=2))
   ((j+=2))
   echo Copy $f to $newname >> "$LOG"
   # cp "$f" "$newname"
done

您可以尝试运行它几次并查看日志以查看您是否喜欢它所说的内容,然后,如果您对它感到满意,您可以从倒数第二行删除#,以便它实际复制文件。

我更喜欢复制而不是重命名,因为我不想冒丢失数据的风险。

【讨论】:

  • 我有点不确定您对包含 1000 多个文件的目录的评论。我认为,一旦您获得 500 多个文件,您的命名将需要更多前导零……我已在代码中发表评论。请检查!
  • 你是对的。我很抱歉。我的意思是 1000 多页。所以是的,500 多个文件。稍后我将尝试代码。谢谢!
  • 像魅力一样工作!非常感谢,马克!!
  • 完成。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
相关资源
最近更新 更多