如何重命名一堆文件以消除引号

时间:2014-12-01 16:31:49

标签: linux

我的iomega NAS使用类似Linux的操作系统,上面有一堆备份文件,文件名包含双引号。像这样:

"水&#34 -4

"水" -5

等。 (不要问他们是如何到达那里的;他们最初是在Mac上创建的)

当我尝试将文件复制到备份驱动器时,这会导致问题:引号显然导致副本失败。 (内置复制工具使用rsync,但是版本相当旧。)

是否有终止命令批量重命名这些文件,只是删除引号?如果失败了,是否有命令一次重命名一个?引号似乎真的搞砸了(我知道:用户已被警告!)

3 个答案:

答案 0 :(得分:1)

简单的单行bash代码:

for f in *; do mv -i "$f" "${f//[\"[:space:]]}"; done

$f是您当前的文件名,${f//[\"[:space:]]}是您的bash子字符串替换器,代表:
在此f(文件名),//(替换)这些[\"[:space:]](字符)没有任何东西[1]。

注1:字符串替换语句:${string//substring/replacement};因为您不需要将子字符串替换为空,所以将/replacement留空。

注2:[\"[:space:]]expr正则表达式。

答案 1 :(得分:0)

您可以循环播放文件并使用mv

for i in *
do
    mv "$i" "`echo $i | sed 's/"//'`"
done

答案 2 :(得分:0)

尝试这样做:

$ rename -n 's/"//' *Water*

并在测试完成后删除-n开关。

请注意,您需要的perl版本,有时安装的其他版本取决于您的发行版。如果您还没有,请尝试搜索prename或访问https://metacpan.org/pod/distribution/File-Rename/rename.PL