MV 命令不适用于以引号开头的文件名



我有一堆文件,文件名随机,以特殊字符开头或结尾,使用trsed的过滤器工作得很好,当我回显结果时,它会给我适当的输出,但当我尝试使用mv更改文件名时,它说文件名已经有了相同的名称:这是我的脚本:

#!/bin/bash
root=/home/
for file in ${root}*
do
new1=$(sed 's/[][ ’,!@?&()`''']/./g' <<< "$file")
echo $(basename "$new1")
done

使用echo命令,新文件名为:


5000....file...1..of..the..dir.ts
filename..1..of..the.dir.ts

这代表了我想要的确切输出。

但是当使用mv命令(下面的代码(时,

#!/bin/bash
root=/home/streaming/BBQwithBaconRecipes/
for file in ${root}*
do 
new1=$(sed 's/[][ ’,!@?&()`''']/./g' <<< "$file")
$(mv $file $new1)
done

这些更改没有应用在这个特定的文件中,你认为是因为我的文件名在引号之间吗?像这样:

'5000$$$file@@1&of!!the&.dir.ts'

我真的需要一个解决方案来将我的过滤器和mv命令推广到所有可能的文件,我认为''导致了这个问题。

mv命令不需要展开。因此,它应该是:
mv "$file" "$new1"