首页 > 解决方案 > 使用 OSX 终端在该文件夹内的第一个文件后重命名文件夹

问题描述

我有一堆文件夹,它们都具有相同的名称或迭代编号……例如 Material 01、Material 02、Material 181 等。里面有很多名称正确的视频文件。我需要将文件夹重命名为与该文件夹中的第一个文件同名(按名称排序)

标签: bashmacosterminal

解决方案


Mac 终端通常使用 bash,所以类似的东西应该可以解决问题: 在你有文件夹的目录中: 把它放在一个名为 rename.sh 的文件中,然后输入bash rename.sh并回车:

#! /bin/bash

for dir in Material*; do

  while read -rd ''; do
    newname=$(basename -- "${REPLY%.*}")
    break
  done < <(find "$dir" -maxdepth 1 -not -name '.*' -type f -print0 | sort -z)

  echo "dir:${dir} new:${newname}"
  mv -n "$dir" "$newname"
done

假如说:

  • 每个第一个视频都有不同的文件名
  • 首先,您的意思是按字母顺序排列。

注意:文件夹将根据文件名命名,不带扩展名。但是,如果您还想将扩展名添加到文件夹的新名称中,您可以将 while 循环中的第一行替换为newname=$(basename -- "$REPLY")

该解决方案还使用 忽略隐藏文件-not -name '.*',并且能够处理包括换行符在内的文件名。但在我看来,在文件名中使用换行符通常是个坏主意。


推荐阅读