我有一堆目录,作者姓名为“first [mi] last”(中间首字母/名称可以是多个),我想将它们更改为“last,first mi”。所以我想要一种方法将名称解析为多个标记,然后重新排列标记。
在 中awk
,它会是这样的:
ls | awk print '$NF", " $1,$2 ...'
答案1
这应该可以工作并且与 shell 无关,将其作为带有单个参数(即您的基本目录)的脚本运行。
它用于
find
获取每行一个目录的名称,假设它们位于提供的基本目录的正下方,并排除任何已转换的目录。它用于
awk
从列表中删除基本目录,只在每一行中保留您要更改的直接目录的名称。 (awk
此处使用 / 作为字段分隔符并打印每行的最后一个字段。)它使用
awk
第二次打印出mv
命令以按照您请求的方式重命名每个目录。 (awk
这里使用默认的空格作为字段分隔符。)将输出保存到文件中,然后在您对它看起来正确时执行它。
。
#!/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"}'