2015-11-16 32 views
1

我正在嘗試從包含';'的客戶端重命名文件,因爲當我將它們上傳到我的服務器時,文件將以零點上傳。重命名包含';'的mac終端中的文件

我使用下面的腳本(我有迴音,這樣我可以看到功能的工作,我申請之前)

file in */*; do echo mv "$file" "${file/;/|}"; done; 

這並不重命名文件

但如果我這樣做

file in */*; do echo mv "$file" "${file/VOLVO/|}"; done; 

它確實將「VOLVO」替換爲「|」

我該如何更換「;」用「|」

+1

我認爲那裏有一個'for'? '用於...中的文件;做回聲的東西; done'?另外,你應該使用'*/* \; *',這樣你就不會做很多冗餘的'mv same same'。 'FOO = B \; R; echo「$ {foo /;/|}」** **適用於bash4 **(Ubuntu)。也許嘗試引用';',以防OS X bash3不同? (就像Tim的回答說的那樣;當他的答案出現時,它會給出'\;'語法)。 –

+0

另外,對於批量重命名,還有像'mmv'或'prename'這樣的工具(有時候被稱爲'rename',在perl中)。 http://www.unix.com/man-page/linux/1/prename/。這樣,您只需啓動一個進程即可進行大量「重命名」系統調用,而不是爲每個重命名都分配一個完整的進程。對於shell單行程中的一次性交互式使用,最好的選擇取決於哪一個可以更容易地表達您想要的轉換:shell文本替換或預編譯或mmv中的模式。 –

+0

謝謝。當我試圖評論'''時它有效。用*/*表示文件;做echo mv「$ file」「$ {file //;/|}」;完成; –

回答

0

我修正了一些建議自己的論壇,通過評論';' '/'

如下 對於文件/;做echo mv「$ file」「$ {file //;/|}」;完成;

感謝蒂姆和彼得的修復

相關問題