2013-08-28 88 views
0

我們有一個大約3000個MP3文件的存儲庫。這些文件中的很多都在其名稱中包含我們的舊域名。 例如:somesong_oldDomainName.mp3SSH在文件名列表中查找並替換字符串

我需要SSH進入站點,找到這些文件的所有實例,並用新的域名重命名它們。 例如:somesong_NEWDomainName.mp3

我知道基本的SSH命令,但沒有像這樣高級的東西。

很確定它會是多個命令的組合。

+0

SSH只是WA y與遠程站點建立通信,在那裏,如果它是基於linux的,你可能有某種類型的shell,例如, bash,所以看看這個:http:// stackoverflow。com/questions/11053558/bash-rename-name-middle-of-many-files-in-middle-name- – x29a

+0

您能否請確認文件駐留在哪個系統上?基於Linux?我的意思是將標籤「bash,shell,遠程訪問」添加到您的問題中,但審閱者並不認爲「多個命令的組合」可能會證明shell問題。那麼當你進入你的mp3machine時,你會得到一個交互式shell(如果是的話)? – x29a

+0

所以我在Bash的Linux服務器上...... – user1661286

回答

2

假設當你ssh到你的Linux服務器,你得到一個交互式shell,這可能是一個可行的辦法:

ssh [email protected] 

那麼你將得到某種形式的終端像

[email protected]:~$ 

,你輸入要在該遠程機器上執行的命令。

正如評論所說,這裏的答案可能正好契合得非常好:

Bash: Rename small part of multiple files in middle of name

[email protected]e-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"

要管本地殼腳本進入SSH連接:How to use SSH to run a shell script on a remote machine?

運行通過SSH遠程外殼腳本: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 
+0

這個建議似乎只適用於只有一個文件的目錄!不知道這是否合理,但我在僅包含1個文件的目錄中嘗試了它,並且它正確地重命名了一個文件。但是當我在一個包含多個文件的目錄中運行它時,我得到了一些錯誤: 「文件名」不是目錄! 我用這個: 爲我in * .mp3;做mv $ i $(echo $ i | sed's/chosenfil/tamasha/g');完成 – user1661286

+0

我假設你的文件名包含空白?我更新了與這些工作相關的答案 – x29a

+1

更好地使用shell自己的替換機制,比如'mv「$ i」「$ {i/_oldDomainName/_newDomainName}」' – tripleee