बैश स्क्रिप्ट में रिक्त स्थान के साथ फ़ाइलों / फ़ोल्डरों से निपटना


1

मुझे एक सिस्टम पर स्थानों की खोज करने की आवश्यकता है। फ़ोल्डर नाम में स्थान हो सकता है; यह फ़ोल्डर नाम के रिक्त स्थान के बिना काम करता है:

    for each in `find /home/ -name "places.sqlite" | grep -i ".mozilla/firefox"` ;do
         echo "${each}"
    done

कौन से प्रिंट: /home/itsupport/.mozilla/firefox/d2gigsya.default/places.sqlite (उदाहरण के लिए)

हालाँकि, यदि फ़ोल्डर में रिक्त स्थान है तो यह फ़ाइल में पथ को काट देता है और मेरी स्क्रिप्ट को तोड़ देता है!

पुनरावृत्ति करने के लिए, इस प्रकार का फ़ोल्डर स्क्रिप्ट में काम करेगा:

    $ sudo find /home/ -name "places.sqlite" | grep -i ".mozilla/firefox"
    /home/itsupport/.mozilla/firefox/d2gigsya.default/places.sqlite

और रिक्त स्थान वाला यह फ़ोल्डर स्क्रिप्ट में काम नहीं करता है:

    $ sudo find /home/ -name "places.sqlite" | grep -i ".mozilla/firefox"
    /home/itsupport/.mozilla/firefox/Random Ass Location/places.sqlite

मुझे पता है कि आप $ (कमांड) या कुछ और का उपयोग कर सकते हैं, लेकिन मुझे यकीन नहीं है कि जब मैं लूप वेरिएबल के रूप में उपयोग कर रहा हूं तो मुझे क्या करना चाहिए। शायद यहाँ मेरी गलती है। वैसे भी, कोई मदद महान होगा।

जवाबों:


3

find-print0इस समस्या से निपटने के लिए झंडा है:

#!/bin/bash

find . -print0 | while read -d $'\0' file
do
    echo ${file}
done

उदाहरण:

$ ls
script.sh  space name
$ ./script.sh 
.
./script.sh
./space name

धन्यवाद! यह मेरे लिए काम करता है: / $ {1} / -name "$ {2}" -print0 | जबकि -d $ '\ 0' फ़ाइल पढ़ें, क्या करें

हालांकि अतिरिक्त grep मुझे वहाँ काम नहीं किया था। अब उस हिस्से का पता लगाना।

2

एक अन्य विकल्प किसी भी व्हाट्सएप पात्रों के बजाय लाइन अंत पर विभाजित करने के लिए IFS का उपयोग करना है।

oldIFS="$IFS"
IFS=$'\n'
for bla in ....
do
...
done
IFS="$oldIFS" # restoring to avoid surprising the rest of the script

0

चूंकि फाइलें अच्छी तरह से ज्ञात स्थानों में हैं, आप बस उपयोग कर सकते हैं

for each in /home/*/.mozilla/firefox/*/places.sqlite
do echo "${each}"
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.