如何使用 find 和 prename 递归地重新格式化目录名称?
How to use find and prename to reformat directory names recursively?
我正在尝试查找以括号中的年份开头的所有目录,例如:
[1990] Nature Documentary
然后重命名它们,删除括号并在中间插入破折号。
1990 - Nature Documentary
下面的 find
命令似乎找到了结果,但是我无法在模式前加上 ^
来标记目录名称的开始,否则它不会返回命中。
我很确定我需要使用 -exec
或 -execdir
,但我不确定如何存储找到的模式并对其进行操作。
find . -type d -name '\[[[:digit:]][[:digit:]][[:digit:]][[:digit:]]] *'
您可以使用重命名命令
find . -type d -name '\[[[:digit:]][[:digit:]][[:digit:]][[:digit:]]\] *'| rename -n 's/(\[\d{4}\]) ([\w,\s]+)+$/ - /'
注意:删除-n
选项后才会生效
与[p]rename
:
-depth -exec prename -n 's/\[(\d{4})]([^\/]+)$/ -/' {} +
如果输出看起来不错,请删除 -n
。
没有它,您将需要一个 shell 脚本,其中包含几个难以理解的参数扩展:
-depth -exec sh -c '
for dp; do
yr=${dp##*/[} yr=${yr%%]*}
echo mv "$dp" "${dp%/*}/$yr -${dp##*/\[????]}"
done' sh {} +
删除 echo
以应用更改。
我正在尝试查找以括号中的年份开头的所有目录,例如:
[1990] Nature Documentary
然后重命名它们,删除括号并在中间插入破折号。
1990 - Nature Documentary
下面的 find
命令似乎找到了结果,但是我无法在模式前加上 ^
来标记目录名称的开始,否则它不会返回命中。
我很确定我需要使用 -exec
或 -execdir
,但我不确定如何存储找到的模式并对其进行操作。
find . -type d -name '\[[[:digit:]][[:digit:]][[:digit:]][[:digit:]]] *'
您可以使用重命名命令
find . -type d -name '\[[[:digit:]][[:digit:]][[:digit:]][[:digit:]]\] *'| rename -n 's/(\[\d{4}\]) ([\w,\s]+)+$/ - /'
注意:删除-n
选项后才会生效
与[p]rename
:
-depth -exec prename -n 's/\[(\d{4})]([^\/]+)$/ -/' {} +
如果输出看起来不错,请删除 -n
。
没有它,您将需要一个 shell 脚本,其中包含几个难以理解的参数扩展:
-depth -exec sh -c '
for dp; do
yr=${dp##*/[} yr=${yr%%]*}
echo mv "$dp" "${dp%/*}/$yr -${dp##*/\[????]}"
done' sh {} +
删除 echo
以应用更改。