- #!/usr/bin/perl
- use 5.14.0;
- use strict;
- use warnings;
- sub usage {
- say "Usage: " . basename($0) . " [ infile ] [ outdir ]";
- exit;
- }
- if (!$ARGV[0] || !$ARGV[1]) { usage(); }
- elsif (! -f $ARGV[0] || ! -d $ARGV[1]) { usage(); }
- my $fat32_limit = 4294967295;
- my $infile = abs_path($ARGV[0]);
- my $outfile;
- my $outdir = abs_path($ARGV[1]);
- `df --block-size=1 "$outdir" | tail --lines 1`))[3]);
- say "$free bytes free in $outdir";
- say "$infile is $size bytes";
- if ($size > $free) {
- say "Not enough free space in '$outdir'";
- exit;
- }
- if ($size > $fat32_limit) {
- my $parts = ceil(( $size / $fat32_limit ));
- foreach my $n (1 .. $parts) {
- $outfile = $outdir . '/' . basename($infile) . '.part' .
- $n;
- if (-f $outfile) {
- say "${outfile}: already exists!";
- exit;
- }
- say "${outfile}: writing...";
- my $temp_data;
- my $ram_disk = 1000000000;
- my $ram_buffer = $fat32_limit;
- my $ram_limit;
- while ( $ram_buffer ) {
- if ($ram_buffer >= $ram_disk) {
- $ram_buffer -= $ram_disk;
- $ram_limit = $ram_disk;
- } else {
- $ram_limit = $ram_buffer;
- }
- }
- }
- } else {
- $outfile = $outdir . '/' . basename($infile);
- if (! -f $outfile) {
- say "${outfile}: writing...";
- }
- say "\nDone copying file!";
FAT32 copy perl script
Posted by Anonymous on Fri 5th Oct 2012 23:19
raw | new post
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.