77K PDF(サイズ約500 GB)を含むフォルダがあります。簡単にアップロードして同僚と共有できるように、各ファイルに1000個のPDFを含む77個の圧縮ファイルに圧縮したいと思います。 Bashでforループを作成し、そこでzipコマンドを使用する方法がわかりませんが、いくつかの例を見ました。これ質問。誰でも私を助けることができますか?
ファイル名は次のとおりです。
FinalRoll_MR_ACNo_@PartNo_%%.pdf
@ と %% は数値です。最初の1000個のファイルをarchive_1.tar.gzのようなファイルに圧縮することができれば本当に良いと思います!ファイルの順番をアルファベット順に保つことができればもっといいと思います!
Ubuntuを実行しているAWS ec2インスタンスを使用しています。
よろしくお願いします!
ベストアンサー1
#!/usr/bin/perl
use strict;
use List::MoreUtils qw(natatime);
use Sort::Naturally;
# specify directory on command line, or default to .
my $dir = shift || '.';
# Find all the PDF files.
#
# NOTE: you could use perl's `Find::File` module instead of
# readdir() to do a recursive search like `find`.
opendir(DIR, $dir) || die "Can't open $dir: $!\n";
my @pdfs = nsort grep { /\.pdf$/i && -f "$dir/$_" } readdir(DIR);
closedir(DIR);
my $size=1000;
my $i=1;
my $iter = natatime $size, @pdfs;
while( my @tmp = $iter->() ){
my $tarfile="archive_" . sprintf('%02i',$i++) . ".tar.gz";
#print join(" ", ('tar','cfz',$tarfile, @tmp)),"\n";
system('echo','tar','cfz',$tarfile, @tmp);
}
これは、 natatime()
PerlList::MoreUtils
ライブラリモジュールの(「n-at-a-time」)機能を使用して、一度に1000個のPDFファイルのリストを繰り返します。
また、このSort::Naturally
モジュールを使用してPDFファイル名の自然な順序を実行します。不要な場合や不要な場合は、その項目(および通話nsort
中の通貨)を削除してください。my @pdfs = ...
正しいソートのために、tarファイル名にゼロで埋められた2つの数字が含まれています。 99を超えるtarアーカイブを埋めるのに十分なPDFファイルがある場合は、3桁以上に変更してください。
書かれたコードは試運転。実際にPDFファイルのバッチを圧縮するために'echo',
関数呼び出しから削除されました。system()
それなしで実行したときに詳細な出力を取得するには、ステートメントのecho
コメントを外しますprint
。ちなみに、Perlの組み込み機能を使用したり、モジュールを使ってきれいにtime()
フォーマットしたり、新起源から数秒後のタイムスタンプを印刷したりするのは簡単ですDate::Format
。たとえば、
print join(" ", (time(),'tar','cfz',$tarfile, @tmp)),"\n";
たとえば、vibhu.pl
実行可能にするには、別の名前で保存しますchmod +x vibhu.pl
。以下はサンプル実行です(「.pdf」ファイルが10個しかないディレクトリ)。
$ touch {1..10}.pdf
$ ./vibhu.pl
tar cfz archive_01.tar.gz 1.pdf 2.pdf 3.pdf 4.pdf 5.pdf 6.pdf 7.pdf 8.pdf 9.pdf 10.pdf
$size=1000
たとえば、に変更すると、$size=3
実際にN個のPDFファイルを一度に実行することがわかります。
$ ./vibhu.pl
tar cfz archive_01.tar.gz 1.pdf 2.pdf 3.pdf
tar cfz archive_02.tar.gz 4.pdf 5.pdf 6.pdf
tar cfz archive_03.tar.gz 7.pdf 8.pdf 9.pdf
tar cfz archive_04.tar.gz 10.pdf
これリスト::追加ユーティリティそして並べ替え::自然モジュールは以下で提供されます。CPAN。展開できるようにすでにパッケージ化されている可能性があります。たとえば、Debianの場合:
sudo apt-get install liblist-moreutils-perl libsort-naturally-perl