mv命令不需要展开。因此,它应该是:
我有一堆文件,文件名随机,以特殊字符开头或结尾,使用tr
或sed
的过滤器工作得很好,当我回显结果时,它会给我适当的输出,但当我尝试使用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 "$file" "$new1"