我正在使用Perl重命名工具编写一个bash脚本,该脚本在其中包含空格的路径中查找任何文件(它做了其他工作,但试图保持简单)。我正在使用 -c 开关将其转换为小写字母,并使用正则表达式将所有空格更改为破折号。该命令完成,没有错误。
var jObj = JObject.Parse(myJsonString);
var myObj = jObj.SelectToken("address").Value<string>());
上面的方法将文件转换为小写字母,但不将破折号替换为空格。然后,我尝试使用表达式前面的-e开关。
rename -f -X -c 's/[ ]+/-/g' /Volumes/data/Users-Links/adrz/test-site/with\ spaces/*
得到...
无法将“ / Volumes / data / Users-Links / adrz / test-site / with spaces / hello world.txt”重命名为“ / volumes / data / users-links / adrz / test-site / with- spaces / hello world.txt':没有这样的文件或目录
似乎作用于具有空格的目录名称以及目录中的文件。请注意,如果路径中没有空格,则可以正常工作。
我尝试过:
我已经搜索了数周,但无法解决。这是该工具中的错误还是我的想法?
谢谢。
答案 0 :(得分:2)
除非您还尝试更改目录,否则可以使用以下任何一种方法:
从文件所在的目录运行rename
。
sh -c 'cd /Volumes/.../with\ spaces; rename -f -X -c -e "s/[ ]+/-/g" *'
仅匹配不带斜杠(/
)的空格。
rename -f -X -c -e 's{[ ]+(?!.*/)}{-}sg' /Volumes/.../with\ spaces/*
将路径分成其组件,仅对文件名部分进行操作。
rename -f -X -c -e '
use Basename qw( dirname basename );
$_ = dirname($_) . "/" . basename($_) =~ s/[ ]+/-/gr;
' /Volumes/.../with\ spaces/*
在这种情况下,这是过大的杀伤力,但在无法进行简单修改(如#2)的情况下,它可能会很有用。