如何使用find和prename递归地重新格式化目录名



我正在尝试查找括号中以年份开头的所有目录,例如:

[1990] Nature Documentary

然后重命名它们,去掉括号并在它们之间插入破折号。

1990 - Nature Documentary

下面的find命令似乎找到了结果,但我不能用^作为模式的前缀来标记目录名的开始,否则它不会返回命中数。

我很确定我需要使用-exec-execdir,但我不确定如何存储找到的模式并对其进行操作

find . -type d -name '[[[:digit:]][[:digit:]][[:digit:]][[:digit:]]] *'

使用[p]rename:

-depth -exec prename -n 's/[(d{4})]([^/]+)$/$1 -$2/' {} +

如果输出看起来不错,则丢弃-n

如果没有它,您将需要一个带有几个难以理解的参数扩展的shell脚本:

-depth -exec sh -c '
for dp; do
yr=${dp##*/[} yr=${yr%%]*}
echo mv "$dp" "${dp%/*}/$yr -${dp##*/[????]}"
done' sh {} +

删除echo以应用更改

您可以使用重命名命令

find . -type d -name '[[[:digit:]][[:digit:]][[:digit:]][[:digit:]]] *'| rename -n 's/([d{4}]) ([w,s]+)+$/$1 - $2/'

注意:在删除-n选项之前,效果不会发生。

相关内容

  • 没有找到相关文章

最新更新