2015-11-16 33 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 //;/|}”;完成;

感谢蒂姆和彼得的修复

相关问题