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"; } }