如何从文件名中删除单引号

时间:2016-11-21 19:29:58

标签: linux bash

进来的文件包含空格,单引号,括号,方括号等。

我删除空格并用以下命令替换点

for file in *.mp4; do mv "$file" `echo $file | tr ' ' '.'` ; done

然后我使用以下命令删除特殊字符

rename -n 's/[^a-zA-Z0-9_-]//g' "$file"

但由于某些原因,单引号(')仍然存在于文件名中。有没有办法在一个命令中使用干净的文件名?

2 个答案:

答案 0 :(得分:2)

在bash中:

for file in *.mp4; do dest="${file//[[:space:]]/.}" && mv -i "$file" "${dest//[^[:alnum:]._-]/}"; done

答案 1 :(得分:0)

sed命令是满足您要求的选项之一。

for file in *.mp4 ; do echo ${file}|sed -e "s/ /./g" -e "s/[\[{\\']//g" ; done

示例:

$ for file in *.mp4 ; do echo $file; done
as {df [jk \'hj.mp4
as {df[jk \'hj.mp4
as {df[jk\'hj.mp4
as {df [jk \'.mp4
$
$ for file in *.mp4 ; do echo ${file}|sed -e "s/ /./g" -e "s/[\[{\\']//g" ; done
as.df.jk.hj.mp4
as.dfjk.hj.mp4
as.dfjkhj.mp4
as.df.jk..mp4
$