[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: regex ve bash script



Merhaba,

* Timu EREN [2005-04-04 06:58:34+0300]
>  Bir arkadaşımın ricası üzerine bazı işler yapmam gerekiyordu bende elim 
> değişmişken yapabileceğimin en iyisi yapayım dedim ve bir bash scirpt yazmaya 
> başladım ancak bir yerinde takıldım yardım edebilirseniz sevinirim...
> 
> aşağıdaki kodun değişkenlerinin aldığı değerleri vereyim...
> ${querantinedir}=/Yedek/Karantina
> ${userdir}=Hasan
> ${File}=/Yedek/Samba/Hasan/clam.cab
> 
> aşağıdaki kodda yapmak istediğim şey eğer /Yedek/Karantina dizininde
> Hasan kullanıcısına ait bir dizin yoksa oluşturması (bunda sorun yok).
> Eğer o dizinde daha önceden bir dosya varsa yeni bir dizin oluşturmak 
> ve onun içerisine taşımak ancak $Files değişkeninin aldığı değerden dolayı 
> ikinci if yapısıda /Yedek/Karantina/Hasan//Yedek/Samba/Hasan/clam.cab
> diye bir dosya kontrol ediliyor .. İçinden çıkamadığım durum ise
>  bana sadece  $File değişkeni içerisinden en sonda bulunan "clam.cab" dosya 
> adını çıkartabilmek. kregexpeditor' e göre [^/]*$ regex kalıbı uygun olması 
> lazım ancak deneme=`echo $Files | grep  "[^/]*$" ` olarak denediğimde sonuç 
> alamıyorum..  bunu nasıl aşabilirim?

Bircok sekilde asilabilir, en kestirmesi `basename $File`.  Ama bence
betigin mantigini biraz degistirin.  Sabitleri tekrar duzenlemeniz ve
MoveFile islevini biraz daha parametrik yapmaniz halinde hem bu problem
kendiliginden gider, hem de daha saglam bir cozume ulasmis olursunuz.
Asagidaki kodu _denemeden_ yazdim.  Umarim yapmak istediginiz isi dogru
anlamisimdir.  Aksi taktirde (veya mevcut kodla devam etmek icin)
basitce 'basename'i kullanin.

QUERANTINEDIR=/Yedek/Karantina
SAMBADIR=/Yedek/Samba
CLAMFILE=clam.cab

MoveFile()
{
	userdir=$QUERANTINEDIR/$1
	smbdir=$SAMBADIR/$1

	# '-p' anahtari dizin zaten varsa birsey yapmaz.
	mkdir -p $userdir

	dest=$userdir
	if [ -e $userdir/$CLAMFILE ]; then
		if [ ! -e $smbdir/$CLAMFILE ]; then
		    # Hata iletisi veya baska birsey?
		    return 1
		fi

		dest=`mktemp -p $userdir/` || return 1
	fi

	mv -f $smbdir/$CLAMFILE $dest/
	# Bu islevin donus degeri bu son komutlarin donus degeri olur.
}

# Kullanim.
MoveDir "hasan"

-- 
roktas



Reply to: