我基本上试图用句点替换目录名和文件名中的所有特殊字符。我试图使用tr,但我很新,我不想搞砸我的所有音乐命名和图片命名。我正在从windows切换到linux并尝试以一种漂亮的格式化模式获取所有内容。我已经成功使用了tr half,但我希望得到你们的帮助!提前致谢!我看过tr手册页,但我只是担心会弄乱12年的图片和音乐文件名!我试图取代的两个人角色是“ - ”但是我在windows中使用的命名方案多年来一直是手工制作而且各不相同,所以我希望能够完成所有内容并替换所有“ - ”的情况。或“ - ”男子气概,但多年来我做过的任何肥胖的指法,除了那种啪啪声之外还会加入一些东西。我想的是:
tr -cd [:alnum:]'。'
这会有用吗?
我的主要目标是转变
01 - 歌曲名称(或特殊/标点符号的任何变体)
进入
01.Name.Of.Song
答案 0 :(得分:1)
您不想使用d
选项,因为它只删除匹配的字符。您可能想要使用s
(挤压)选项。试试这个:
tr -cs '[:alnum:]' '.'
你可以这样测试:
echo '01 - Name Of Song' | tr -cs '[:alnum:]' '.'
(忽略输出结尾处的额外句点。这只是换行符,一般不会出现在文件名中。)
但这可能对你的任务没什么用处。如果你想进行大规模重命名,你可以使用这样的一个小的perl程序:
#!/usr/bin/perl
$START_DIRECTORY = "Music";
$RENAME_DIRECTORIES = 1; # boolean (0 or 1)
sub procdir {
chdir $_[0];
my @files = <*>;
for my $file (@files) {
procdir($file) if (-d $file);
next if !$RENAME_DIRECTORIES;
my $oldname = $file;
if ($file =~ s/[^[:alnum:].]+/\./g) {
print "$oldname => $file\n";
# rename $oldname, $file; # may not rename directories(?)
}
}
chdir "..";
}
procdir($START_DIRECTORY);
使用注释掉的rename
命令(如上所述)运行它来测试它。取消注释rename
命令以实际重命名文件。买者自负。有龙。等