重命名 perl 工具:无法重命名,没有这样的文件或目录
rename perl tool : Can't rename, No such file or directory
我正在使用 Perl 重命名工具编写一个 bash 脚本来查找路径中包含空格的任何文件(它会做其他事情,但尽量保持简单)。我正在使用 -c 开关转换为小写,并使用正则表达式将所有空格更改为破折号。命令完成且没有错误。
rename -f -X -c 's/[ ]+/-/g' /Volumes/data/Users-Links/adrz/test-site/with\ spaces/*
以上将文件转换为小写,但没有用破折号替换空格。然后我尝试在表达式前面使用 -e 开关。
rename -f -X -c -e 's/[ ]/-/g' /Volumes/data/Users-Links/adrz/test-site/with\ spaces/*
并得到...
Can't rename '/Volumes/data/Users-Links/adrz/test-site/with spaces/hello world.txt' to '/volumes/data/users-links/adrz/test-site/with-spaces/hello world.txt': No such file or directory
好像作用于带空格的目录名和目录内的文件。请注意,如果路径中没有空格,则可以正常工作。
我试过:
- 使用双引号、单引号和 / 转义路径中的空格。
- 我试过使用 Subst 和 Subs-all 命令,但都出现了同样的错误
我已经搜索了数周,但无法解决。这是工具的错误还是我的想法?
谢谢。
除非您还尝试更改目录,否则您可以使用以下任一方法:
运行 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 中)的情况下可能很有用。
我正在使用 Perl 重命名工具编写一个 bash 脚本来查找路径中包含空格的任何文件(它会做其他事情,但尽量保持简单)。我正在使用 -c 开关转换为小写,并使用正则表达式将所有空格更改为破折号。命令完成且没有错误。
rename -f -X -c 's/[ ]+/-/g' /Volumes/data/Users-Links/adrz/test-site/with\ spaces/*
以上将文件转换为小写,但没有用破折号替换空格。然后我尝试在表达式前面使用 -e 开关。
rename -f -X -c -e 's/[ ]/-/g' /Volumes/data/Users-Links/adrz/test-site/with\ spaces/*
并得到...
Can't rename '/Volumes/data/Users-Links/adrz/test-site/with spaces/hello world.txt' to '/volumes/data/users-links/adrz/test-site/with-spaces/hello world.txt': No such file or directory
好像作用于带空格的目录名和目录内的文件。请注意,如果路径中没有空格,则可以正常工作。
我试过:
- 使用双引号、单引号和 / 转义路径中的空格。
- 我试过使用 Subst 和 Subs-all 命令,但都出现了同样的错误
我已经搜索了数周,但无法解决。这是工具的错误还是我的想法?
谢谢。
除非您还尝试更改目录,否则您可以使用以下任一方法:
运行
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 中)的情况下可能很有用。