这个我需要做的事情,在这个时刻不能强迫我的大脑思考一个快速的方法,所以这是我的问题:
我收到了许多名为的文件,让我们说:
word1_word2.ext
word3_word4.ext
word5_word5.ext
..
我需要在osx中创建一个bash / perl / etc脚本来改变他们的文件名,基本上做3件事:
所以,换句话说..
' whatever_whatever2_whatever3.jpg'无论是什么,无论是什么,无论是什么,三十五岁,才一致。
任何帮助都会受到欢迎:)
答案 0 :(得分:2)
此Perl单行程序将按您的要求执行
perl -e 'rename($_, tr/_/ /r =~ s/(?<!\.)\b([a-z])/\u$1/gr =~ s/(?=[^.]+$)/full./r) for glob "*.ext"'
它使用tr///
将所有下划线转换为空格,然后将s///
转换为大写所有小写字母,前面是单词边界而不是点字符,并再次使用在后缀full.
之前。它对/r
和tr
使用非破坏性s
修饰符,以便返回修改后的字符串,而不是就地编辑它。
答案 1 :(得分:1)
一个简单版本,它从命令行获取文件列表,根据您的示例重命名:
#!/usr/bin/perl
use strict;
use warnings;
use File::Copy qw(move);
for my $fn (@ARGV)
{
my $newfn = $fn;
# replace any spaces, tabs or _ with a single ' '
$newfn =~ s/[_ \t]+/ /g;
# uppercase the first letter of any words in the new string
$newfn =~ s/(^|\s)([a-z])/$1\U$2/g;
# and add '.full' before any extension
$newfn =~ s/(\.[^\.]+)$/.full$1/g;
# and rename
move($fn, $newfn) or die "Unable to rename '$fn' to '$newfn': $!\n";
}
答案 2 :(得分:0)
假设你有一个基于Perl的rename
命令(通常称为prename
),那么:
$ prename -n 's/^./\U$&/; s/_(.)/\U$1/g ;s/\.[^.]+$/.full$&/' whatever_whatever2_whatever3.jpg
whatever_whatever2_whatever3.jpg renamed as WhateverWhatever2Whatever3.full.jpg
$
第一个替代品用大写字母替换前导字母;第二个用_x
取代X
;第三个在后缀字符串之前插入.full
(一个点后跟非点)。如果你想要空格而不是删除下划线,那么修复是微不足道的(使用s/_(.)/ \U$1/g
作为第二个替代)。
在Ubuntu 14.04 LTS衍生产品上进行测试。