1

我正在运行一个 shell 脚本来使用 sed 删除所有带有此代码的元字符。

for file in /path/to/folder/*; do
   mv "$file" "$(echo $file | sed "s,[()\^\$\?*+=\|#!@%&-],,g")"
done

它工作得很好,但是当我希望它也查找正斜杠(“/”)时,它会删除所有文件。这就是我用的。s,[/()\^\$\?*+=\|#!@%&-],,g

这是为什么?以及我将如何定位正斜杠。

谢谢。

4

2 回答 2

1

更好地使用这个(不要试图重新发明一个方轮):

detox /path/to/dir/*

http://detox.sourceforge.net/

描述:一个旨在通过用标准等效字符替换字符来清理文件名的实用程序

于 2013-08-07T18:45:44.313 回答
1

不,它没有删除任何文件,但它们可能已经对你隐藏了,因为它们.现在都以点开头。运行ls -al以查看这些文件。

发生的事情是,通过在您的 sed 命令中包含正斜杠/,您的文件将被重命名为:.filename因为首先/已被 sed 剥离。

于 2013-08-07T18:46:17.227 回答