Merhaba arkadaşlar,
Bu aralar burası boş kalmasın dedim ve az önce denediğim hoşuma giden bir kabuk (bash) çalışmasını sizlerle paylaşmak istedim.Olur ya, lazım olur, aramayasınız.
İlk olarak bu bahsettiğim çalışmayı nereden edindiğimden bahsedeyim.Çalışmanın sahibi Mike Taylor.Web sitesi adresi de miketaylor.org.uk.Kendisi bir İngiltere vatandaşı.Programlama, tasarım, belgelendirme çalışmaları ve danışmanlık ile ilgileniyormuş.Aracın kodları buradaki adreste.Ne olur ne olmaz diye, değiştirmeden buraya da yazayım:
#!/usr/bin/perl -w # $Id: deb2targz,v 1.1 2002/12/17 11:57:54 mike Exp $ # deb2targz - convert a Debian Linux .deb file to a .tar.gz # # This is a hack based only on my eyeball inspection of a single .deb # file (scottfree_1.14-5_i386.deb) and not on a deep understanding of # the format. However, so far as I can tell, here's how it works: # # First line -- file header: "!<arch>" or similar # Multiple blocks -- each one, a header line followed by data # Header line -- <filename> <num1> <num2> <num3> <mode> <len> # Data -- <len> bytes of data # We want the block called "data.tar.gz" # # This naive algorithm seems to work on the other .deb files that I've # tested it on, so I'm happy enough with it: # libapache-reload-perl_0.07-1_all.deb # libogg0_1.0.0-1_i386.deb # abiword_1.0.2+cvs.2002.06.05-1_i386.deb use strict; use IO::File; $0 =~ s@.*/@@; if (@ARGV == 0) { print STDERR "Usage: $0 <deb-file> [<deb-file> ...]\n"; exit(1); } FILE: foreach my $filename (@ARGV) { if ($filename !~ /\.deb$/) { print "$0: ignoring '$filename' (not a .deb)\n"; next; } print "$0: converting '$filename' ...\n"; my $fh = new IO::File("<$filename") or die "$0: can't read '$filename': $!"; <$fh>; # discard file-header line my $data = join('', <$fh>); $fh->close(); while ($data) { my $header; ($header, $data) = ($data =~ /(.*?)\n(.*)/s); my($name, $num1, $num2, $num3, $num4, $len) = split /\s+/, $header; #print "header='$header'\n\tname='$name', len=$len\n"; if ($name eq "data.tar.gz") { # Found it $data = substr($data, 0, $len); $filename =~ s/\.deb$/.tar.gz/; my $fh = new IO::File(">$filename") or die "can't write '$filename': $!"; print $fh $data; $fh->close(); print "$0: wrote '$filename'\n"; next FILE; } print "$0: skipping section '$name'\n"; if (substr($data, $len, 1) eq "\n") { $len++; } $data = substr($data, $len); }}
Oradaki dosyayı indirin ya da buradan kopyalayıp masaüstüne herhangi bir isimle kaydedin.Yapmanız gereken tek şey, kaydettiğiniz dizinde terminali açıp* (örnek olarak deb2targz.caner ismiyle kaydetmiş olalım
)
./deb2targz.caner bu-benim-deb-uzantili-dosyam.deb
komutunu vermek.Bu kadar.
* – Kaydettiğiniz dizine girip F4′e basarsanız terminal açılacaktır.Yahut
cd dizinadi/altdizin
komutuyla da terminalden oraya girebilirsiniz.
Kolay gelsin.İyi günler…
Pingback: eski günlükteki yazılarım « ~caner