0

我们有大约 3000 个 MP3 文件的存储库。其中许多文件的名称中都有我们的旧域名。例如:somesong_oldDomainName.mp3

我需要通过 SSH 连接到站点,找到这些文件的所有实例并用新域名重命名它们。示例:somesong_NEWDomainName.mp3

我知道基本的 SSH 命令,但不知道这样的高级命令。

很确定它将是多个命令的组合。

4

1 回答 1

2

假设您在 ssh 进入您的 linux 服务器时获得了一个交互式 shell,这可能是一种可能的方式:

ssh user@machine-name-or-ip

然后你会得到某种终端,比如

user@machine-name:~$

您可以在其中输入要在该远程计算机上执行的命令。

正如评论中提到的,这里的答案可能非常适合:

Bash:重命名名称中间的多个文件的一小部分

user@machine-name:~$ for i in *.mp3; do mv "$i" "$(echo "$i" | sed 's/_oldDomainName/_NEWDomainName/g')"; done

这假设您的当前目录是其中包含所有 MP3 文件的目录。

如果您不想对文件进行交互式操作,例如因为它们经常更改并且您希望脚本执行此操作,SSH 也可以远程执行命令和/或 shell 脚本。

使用 SSH 调用直接传递命令: 执行远程命令时出现 SSH 错误:“stdin: is not a tty”

将本地 shell 脚本通过管道传输到 SSH 连接:如何使用 SSH 在远程机器上运行 shell 脚本?

通过 SSH 运行远程 shell 脚本:如何使用 ssh 远程运行脚本文件

编辑:假设你通过 SSH 连接到你的远程机器并且有一些类似的 bash 和 sed 版本,它应该像这样工作:

$ ls
bar_chosefil.mp3 boo_chosefil.mp3 foo_chosefil.mp3
$ for i in *.mp3; do mv $i $(echo $i | sed 's/chosefil/tamasha/g'); done
$ ls
bar_tamasha.mp3 boo_tamasha.mp3 foo_tamasha.mp3

涉及的版本:

  • 重击:4.2.25
  • sed:4.2.1
  • MV:8.13

编辑 2:更新命令以使用文件名中的空格

$ ls
asd chosefil.mp3 bar_chosefil.mp3 boo_chosefil.mp3 foo_chosefil.mp3
$ for i in *.mp3; do mv "$i" "$(echo "$i" | sed 's/chosefil/tamasha/g')"; done
$ ls
asd tamasha.mp3 bar_tamasha.mp3 boo_tamasha.mp3 foo_tamasha.mp3
于 2013-08-28T20:29:09.257 回答