拆分命令等效/replace,总计件/部件?

Unix / Linux上的标准拆分命令允许你将文件按字节或行分割成固定大小的块,输出文件名后缀为字母或数字(例如PREFIXaa,PREFIXab,…或PREFIX1,PREFIX2 .. 。)

然而,单从输出名称不清楚应该有多less件。

是否有一个标准的工具,将这样做,即输出到例如PREFIX1of4,PREFIX2of4 …或类似? 或者这是一个Perl的工作(即我find一个Perl脚本)。

谢谢!

Wodow

如果您需要从生成的“片文件”名称中完全识别“片段编号”,则可以使用“-d”并将后缀参数作为生成“片文件”的目录名称。 使用“-a”可以指定用于生成后缀名称的位数。

例如:分割文件“cfg.pm”,每个输出文件3行; 使用3位数字作为生成的后缀(确保名称空间不用尽); 只使用数字后缀; 通过指定一个目录作为前缀来诀别分割以生成仅数字的文件名

mkdir ./s split -a 3 -l 3 -d cfg.pm s/ 

之后,

 ls s | tail -1 

会隐式给你生成文件的数量

 ls s|tail -1 414 

从adirau的回答中find答案:

如果您的系统具有称为rename的Perl脚本(并且它是支持此操作的版本),则可以重命名文件,以便每个数字都加1,并具有前缀和后缀:

 count=$(($(ls s | tail -n 1) + 1)) rename "my \$n=sprintf(\"%03d\", \$_+1); my \$c=sprintf(\"%03d\", $count); s/.*/prefix\${n}of\${c}/" * 

这将重新命名文件:

 000 001 002 

至:

 prefix001of003 prefix002of003 prefix003of003 

顺便说一下,这是Perl脚本的大部分内容:

 use strict; use Getopt::Long; Getopt::Long::Configure('bundling'); my ($verbose, $no_act, $force, $op); die "Usage: rename [-v] [-n] [-f] perlexpr [filenames]\n" unless GetOptions( 'v|verbose' => \$verbose, 'n|no-act' => \$no_act, 'f|force' => \$force, ) and $op = shift; $verbose++ if $no_act; if (!@ARGV) { print "reading filenames from STDIN\n" if $verbose; @ARGV = <STDIN>; chop(@ARGV); } for (@ARGV) { my $was = $_; eval $op; die $@ if $@; next if $was eq $_; # ignore quietly if (-e $_ and !$force) { warn "$was not renamed: $_ already exists\n"; } elsif ($no_act or rename $was, $_) { print "$was renamed as $_\n" if $verbose; } else { warn "Can't rename $was $_: $!\n"; } }