File 用于重命名特殊字符文件和目录的脚本
我正在寻找一个脚本重命名文件和目录,其中有特殊字符。 我的文件:File 用于重命名特殊字符文件和目录的脚本,file,unix,directory,find,rename,echo,mv,bash,File,Unix,Directory,Find,Rename,Echo,Mv,Bash,我正在寻找一个脚本重命名文件和目录,其中有特殊字符。 我的文件: ?rip?ev <- Directory - Juhendid ?rip?evaks.doc <- Document - ?rip?ev 2 <- Subdirectory -- t?ts?.xml <- Subdirectory file ?rip?ev我通常用Perl做这种事情: #!/usr/bin/perl sub procdir { chdir @_[0]; for (<*
?rip?ev <- Directory
- Juhendid ?rip?evaks.doc <- Document
- ?rip?ev 2 <- Subdirectory
-- t?ts?.xml <- Subdirectory file
?rip?ev我通常用Perl做这种事情:
#!/usr/bin/perl
sub procdir {
chdir @_[0];
for (<*>) {
my $oldname = $_;
rename($oldname, $_) if s/\?//g;
procdir($_) if -d;
}
chdir "..";
}
procdir("top_directory");
#/usr/bin/perl
副主任{
chdir@[0];
对于(){
我的$oldname=$\ux;
重命名($oldname,$\如果s/\?//g;
procdir($)if-d;
}
chdir“.”;
}
procdir(“顶级目录”);
您可以这样做
find -name '*\?*' -exec bash -c 'echo mv -iv "$0" "${0//\?/}"' {} \;
请注意之前的,以便在实际更改任何内容之前查看它的功能。除此之外:
- 在名称中搜索
?
(?
相当于*
的单字符版本,因此需要转义)
- 执行bash命令,将
{}
作为第一个参数传递(因为没有脚本名称,所以它是$0
而不是$1
)
${0/\?/}
执行参数扩展,将所有出现的?
替换为零李>
还请注意,在linux中,文件类型不依赖于名称,但这不应更改任何文件扩展名,除非它们包含?
此外,如果符号链接包含?
(不清楚这是否是问题所期望的)。谢谢:)将在测试环境中测试。如果它能像我需要的那样工作,那么我会接受答案:)非常感谢!谢谢:)写得很好,解释得很好。我想这会对我有用:)就像一个符咒!非常感谢你,伙计:)
find -name '*\?*' -exec bash -c 'echo mv -iv "$0" "${0//\?/}"' {} \;