İçinde boşluk olan bir dosya adı üzerinden duramaz


2

Bir proje için komut dosyası yazma ve komut dosyası yazma konusunda çok yeniyim. İçinde boşluk olan boyutu kontrol etmek için, bir dosya adına "stat" yaparken bir sorun yaşıyorum. Sorun şu ki, komutu doğrudan yazamıyorum ve önce onu bir değişkende saklamalıyım, sonra da bu değişken üzerinden çalıştırmalıyım. Örneğin betiğim:

##test.sh
###Start
OIFS=$IFS

IFS=$'\n'

filename=$1

a=stat
b=-c  
c=%s
d=${filename}

CMD="$a $b $c $d"

result=`$CMD`

echo "Size is:"$result

IFS=$OIFS
###END

IFS = $ '\ n' değerini, içinde boşluk olan dosya adını parametre olarak iletecek şekilde ayarlıyorum. çalıştırdığımda şunu alıyorum:

[root@abhargava ~]# ./test.sh dirLevel1/file\ Level1.txt
./test.sh: line 9: stat -c %s dirLevel1/file Level1.txt: No such file or directory
Size is:

IFS nedeniyle, sanırım kabuğun komutu parçalara bölmeden tek bir birim olarak ele aldığını ve bu IFS ayarını kaldırırsam şöyle diyor:

[root@abhargava ~]# ./test.sh dirLevel1/file\ Level1.txt
stat: cannot stat `dirLevel1/file': No such file or directory
stat: cannot stat `Level1.txt': No such file or directory
Size is:

Bu yüzden parametreye iki farklı dosya gibi davranıyor. Ben de "$ @" kullanamıyorum çünkü dosya ismini başka bir dosya dizinindeki başka bir mantıktan alıyorum.

for i in 'find ${arg} -type f'
do
calling the test.sh
done

Lütfen en kısa sürede bana yardım et .. !! Şimdiden teşekkürler....!!


Biçimlendirmenizi daha okunaklı hale getirmek için güncellendi, lütfen bir şeyi yanlışlıkla değiştirmediğimi doğrulamak için iki kez kontrol edin.
nerdwaller

Yanıtlar:



0

Ignacio ile aynı fikirdeyim, Bash'in senaryolarını basit tutmak en iyi yaklaşım. Bundan sonra, betiği boşluklarla çalışmasına izin verecek şekilde basitleştirdim. Boşlukları işlemesine izin vermek için, dosya adını tırnak işaretleri içine almak, komut dosyasının dosya adındaki boşluklarla ilgilenmesine izin verdi.

##test.sh
###Start

result=`stat -c %s "$1"`

echo "Size is:"$result

###END
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.