为了将文件写入 USB 卷,我想重命名包含 '?'、'"'、'*' 或 ':' 的文件名,以用空格替换这些字符中的任何一个。但是我在使用 '* '. 我的 bash 脚本是
for file in *
do
mv -v "'"$file"'" "'"$(echo "$file" | sed 's/\(.*\)[?"*:]\(.*\)/\1 \2/')"'"
done
'*' 不断扩展到当前目录中的文件名中。我试过使用
set -f
但是最初的“in *”不起作用。
只要确保正确引用文件名就不会出现问题。
您
"'"$file"'"
实际上$file
完全没有引用(用单引号引起来,但这些变量本身不引用变量或其值,因为它们本身被引用)。也可以看看:
关于你的
sed
一点。sed
有一个简洁的小命令,许多人似乎都忽略了这个命令y
:这会将表达式第一部分中的所有字符更改为第二部分中的相应字符(此处为所有空格)。
tr
也有效:但在这种情况下,使用 的内置参数替换工具
bash
进行所需的更改会更方便。你的报价发生了一些奇怪的事情。
首先更改
"'"
为"