如何递归正则表达式重命名双破折号

如何递归正则表达式重命名双破折号

我正在使用 Wordpress Eazyest 图库创建 2000 个图库。有些文件的文件名中有双破折号或三破折号。例如:abc---def.jpg 这些文件是通过 FTP 上传的。

在 Wordpress 管理员和前端 HTML 上,它们被替换,该文件被命名为 abc-def.jpg,因此它们成为断开的链接/ src。

有没有办法使用 SSH 将文件夹中的所有 --- 或 -- 替换为单个 - 字符?我在 Ubuntu 12.04 上。

答案1

要在单个目录中匹配/更改该模式,应该很简单

rename -- 's/-+/-/' *.jpg

(用单个破折号替换一个或多个连续的破折号)但首先通过添加 -n 和 -v 标志进行试运行

rename -nv -- 's/-+/-/' *.jpg

如果单个名称中有多个破折号的多个实例(例如 abc---def--ghi.jpg),那么您将需要添加g(全局)开关

rename -- 's/-+/-/g' *.jpg

如果您需要递归更改图库子目录中的名称,那么您可以使用重命名命令作为命令exec的操作find,例如

find /path/to/dir -name '*.jpg' -exec rename -nv -- 's/-+/-/g' {} +

或者,如果你的远程 shell 支持globstarshell 选项,你可以尝试使用类似下面的 glob 让 rename 命令自行递归执行**/*.jpg

答案2

  1. ssh进入您安装 Wordpress 的 Ubuntu 框;
  2. cd进入包含所有画廊的主目录;
  3. 跑步find -iname '*--*' -exec sh -c 'mv "{}" "$(echo {} | tr -s '-')"' \;

答案3

假设每个文件中只有一组---或:--

#!/bin/bash -e

## Substitute /path/to/folder for the root folder
if cd /path/to/folder
then
    find . -name '*---*.jpg' -exec bash -c 'file={}; mv -v "${file}" "${file/---/-}"' ';'
    find . -name '*--*.jpg' -exec bash -c 'file={}; mv -v "${file}" "${file/--/-}"' ';'
fi

ssh进入机器然后运行上面的代码,/path/to/folder用所有文件替换根文件夹。

相关内容