SSH在文件名列表中查找并替换字符串

时间:2013-08-28 15:49:41

标签: linux bash shell ssh remote-access

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

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

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

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

1 个答案:

答案 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

涉及的版本:

  • bash: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