Pratyaksha J. Wirapati wrote:
> misalkan string "../../bla/bla" tersebut ada di suatu file atau stdin, satu
> baris satu path:
>
> ../../foo
> ../../bar
> ../../baz
>
> dan kita ada di /usr/local/archives/RedHat
> maka program perl ini:
>
> use Cwd;
> while(<>)
> {
> $z=cwd();
> ~/((\.\.\/)*)(.*)/; $x=$1; $y=$3;
> $x=~s/\.\./\[^\\\/\]\*\\/g;chop($x);
> $z=~s/$x\/?$//;
> print $z,$y,"\n";
> }
>
> akan mengubah input menjadi:
>
> /usr/local/foo
> /usr/local/bar
> /usr/local/baz
>
Saya jalankan programnya, tapi keluar pesan...
Can't locate cwd.pm in test.pl line 1
di mana test.pl adalah nama file programnya. Koq bisa gini?
NB: Saya *sangat awam* terhadap bahasa perl.
Btw, program perl tadi bisa meng-absolutkan semua nama file relatif,
atau hanya yang berbentuk
../../blabla/bla
> >sekaligus men-dereferensi-kan semua symbolic link yang mungkin ada
> >(hasil akhir berupa nama file "beneran" yang bukan lagi symbolic link).
>
> waduh ini agak rumit. nyerah deh.
Wah, yang veteran aja udah nyerah, apalagi yang newbie seperti saya?
>
> tapi ada satu hal yg saya mau nanya. bukannya mau mengalihkan topik, tapi
> siapa tau bisa membantu: "masalah sebenarnya apa, sih?"
Saya mau me-"mount" direktory FS iso9660 yang ada trans.tbl-nya, tapi
tidak dikenali sebagai ekstensi RRIP_..... (walaupun di-mount beneran,
nama file-nya masih tetap terpotong)Bash script-nya sudah hampir jadi,
tinggal masalah nama file relatif itu tadi, gunanya untuk digunakan
sebagai parameter ke
ln -s ...
Idenya sederhana sekali, saya (buat script untuk) men-search isi
trans.tbl dengan grep untuk file yang terpotong namanya, cari nama file
panjangnya, lalu set symbolic link dengan nama file panjangnya ke file
asli.
Yang jadi masalah, bila nama directory input yang diberikan nama
relatif, atau nama symbolic link, kacaunya pas dibuat symbolic link yang
baru, ketika diakses jadi "too many simbolic links".
Bila nama directory input dan output sudah absolut dan tidak mengandung
symbolic link, tidak jadi masalah.
Gini rancangan script-nya...
> #! /bin/bash
> # last revision 1998-03-05
> # mtbl -- Copyright (C) Sasmito Adibowo <[EMAIL PROTECTED]> 1998.
> #
> # Distributed under the GNU General Public License v 2.0
> #
> # Modification is allowed as long as the original copyright notice
> # is preserved.
>
> if expr match "$1" "\\-h" >/dev/null
> then
> echo "$0 sourcedir targetdir"
> exit
> fi
>
> VERBOSE=1
> TABLE="trans.tbl"
> PATHSEP="/"
> SPACE=" "
>
> SrcDir="$1"
> TrgDir="$2"
>
> if test `expr length "$SrcDir"` -eq 0
> then
> echo "Missing source dir name."
> exit
> fi
> if test `expr length "$TrgDir"` -eq 0
> then
> echo "Missing target dir name."
> exit
> fi
>
> for PathName in "$SrcDir"/*
> do
>
> FileName=`basename "$PathName"`
> #
> # $FileName ready
> #
>
> # Get TRANS.TBL entry.
> # Surround with $FileName with space and ";" (see below), so grep
> # will find the correct filename.
> # TRANS.TBL is not case sensitive (?)
>
> FoundLine=`grep -i " $FileName\\.\?;" "$TABLE"`
> # echo $FileName
> if test `expr length "$FoundLine"` -ne 0
> then
> if test $VERBOSE -ne 0
> then
> echo "Found $FileName in $TABLE"
> fi
> # Sample TRANS.TBL entry:
> #
> # F LINUX.000;1 linux.jdk-1.0.1-try1.common.tar.gz
> #
> # fields:
> # <type> <dosname>;<unknown> <longname>
> # type: D is directory entry, F is file entry
> #
> # echo $FoundLine
>
> len=`expr length "$FoundLine"`
>
> AfterDosNameIndex=`expr index "$FoundLine" ";"`
> WordLen=`expr $len - $AfterDosNameIndex + 1`
>
> AfterDosNameEntry=`expr substr "$FoundLine" $AfterDosNameIndex \
> $WordLen`
>
> # echo $AfterDosNameEntry
> LongNameStartIndex=`expr index "$AfterDosNameEntry" " "`
> len=`expr length "$AfterDosNameEntry"`
> WordLen=`expr $len - $LongNameStartIndex + 1`
> LongName=`expr substr "$AfterDosNameEntry" "$LongNameStartIndex"
>$WordLen`
> LongName=`echo $LongName` #remove spaces and tabs
> if test `expr length "$LongName"` -ne 0
> then
> if test $VERBOSE -ne 0
> then
> echo "Link: $SrcDir/$FileName --> $TrgDir/$LongName"
> #
> # perform the link -- masih salah kalo nama file-nya
>relatif/symlink
> # ln -s -v $SrcDir/$FileName $TrgDir/$LongName
> fi
> fi
> else
> echo "Entry $FileName not found in $TABLE."
> echo "Link: $SrcDir/$FileName $TrgFir/$FileName"
> #
> # perform the link -- masih salah kalo nama file-nya relatif/symlink
> # ln -s -v $SrcDir/$FileName $TrgDir/$FileName
> #
> fi
> done
>
Bagaimana?
--
May The Force be with you,
Sasmito Adibowo
http://www.bitsmart.com/adib
-
STOP-LANGGANAN: 'unsubscribe' ke: [EMAIL PROTECTED]
START-LANGGANAN: 'subscribe' ke: [EMAIL PROTECTED]