将目录从“fname [mname] lname”重命名为“lname, fname [mname]”

将目录从“fname [mname] lname”重命名为“lname, fname [mname]”

我有一堆目录,作者姓名为“first [mi] last”(中间首字母/名称可以是多个),我想将它们更改为“last,first mi”。所以我想要一种方法将名称解析为多个标记,然后重新排列标记。

在 中awk,它会是这样的:

ls | awk print '$NF", "  $1,$2 ...'   

答案1

这应该可以工作并且与 shell 无关,将其作为带有单个参数(即您的基本目录)的脚本运行。

  1. 它用于find获取每行一个目录的名称,假设它们位于提供的基本目录的正下方,并排除任何已转换的目录。

  2. 它用于awk从列表中删除基本目录,只在每一行中保留您要更改的直接目录的名称。 (awk此处使用 / 作为字段分隔符并打印每行的最后一个字段。)

  3. 它使用awk第二次打印出mv命令以按照您请求的方式重命名每个目录。 (awk这里使用默认的空格作为字段分隔符。)

  4. 将输出保存到文件中,然后在您对它看起来正确时执行它。

#!/bin/sh
find "$1" -mindepth 1 -maxdepth 1 -type d -not -name "*,*"|\
awk -F/ '{print $NF}'|\
awk -v DIR="$1" '{printf "mv \"" DIR "/" $0 "\" \"" DIR "/" $NF", "; for (i=1; i<NF; i++) {printf $i" "}; printf "\"\n"}'

相关内容