我们有大约 3000 个 MP3 文件的存储库。其中许多文件的名称中都有我们的旧域名。例如:somesong_oldDomainName.mp3
我需要通过 SSH 连接到站点,找到这些文件的所有实例并用新域名重命名它们。示例:somesong_NEWDomainName.mp3
我知道基本的 SSH 命令,但不知道这样的高级命令。
很确定它将是多个命令的组合。
我们有大约 3000 个 MP3 文件的存储库。其中许多文件的名称中都有我们的旧域名。例如:somesong_oldDomainName.mp3
我需要通过 SSH 连接到站点,找到这些文件的所有实例并用新域名重命名它们。示例:somesong_NEWDomainName.mp3
我知道基本的 SSH 命令,但不知道这样的高级命令。
很确定它将是多个命令的组合。
假设您在 ssh 进入您的 linux 服务器时获得了一个交互式 shell,这可能是一种可能的方式:
ssh user@machine-name-or-ip
然后你会得到某种终端,比如
user@machine-name:~$
您可以在其中输入要在该远程计算机上执行的命令。
正如评论中提到的,这里的答案可能非常适合:
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
涉及的版本:
编辑 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