我们有大约3000个MP3文件的存储库。其中许多文件的名称都包含我们的旧域名。 例如:somesong_oldDomainName.mp3
我需要通过SSH连接到该站点,找到这些文件的所有实例,并使用新域名重命名它们。 示例:somesong_NEWDomainName.mp3
我知道基本的SSH命令,但不知道像这样的高级命令。
很确定它将是多个命令的组合。
答案 0 :(得分:2)
假设您在使用Linux服务器时获得交互式shell,这可能是一种可能的方式:
ssh user@machine-name-or-ip
然后你会得到某种类似
的终端user@machine-name:~$
您输入要在该远程计算机上执行的命令。
正如评论中所提到的,这里的答案可能非常合适:
Bash: Rename small part of multiple files in middle of name
user@machine-name:~$ for i in *.mp3; do mv "$i" "$(echo "$i" | sed 's/_oldDomainName/_NEWDomainName/g')"; done
这假定,您当前的目录是包含所有MP3文件的目录。
如果您不希望对文件进行交互式操作,例如因为它们经常更改并且您希望脚本执行此操作,所以SSH还可以远程执行命令和/或shell脚本。
使用SSH调用直接传递命令: SSH error when executing a remote command: "stdin: is not a tty"
将本地shell脚本传递到SSH连接:How to use SSH to run a shell script on a remote machine?
通过SSH运行远程shell脚本:how to run a script file remotely using 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