मैं कुछ फ़ाइलों में उपयोग find
करने की कोशिश कर रहा हूं echo 0
, लेकिन जाहिर तौर पर यह केवल साथ काम करता है sh -c
:
find /proc/sys/net/ipv6 -name accept_ra -exec sh -c 'echo 0 > {}' \;
लेकिन मेरे sh -c
साथ प्रयोग करने find -exec
से मुझे बहुत बेचैनी होती है क्योंकि मैं समस्याओं के उद्धरण पर संदेह करता हूं। मैंने इसके साथ थोड़ा सा सामना किया और जाहिर तौर पर मेरे संदेह जायज थे:
मेरा परीक्षण सेटअप:
martin@dogmeat ~ % cd findtest martin@dogmeat ~/findtest % echo one > file\ with\ spaces martin@dogmeat ~/findtest % echo two > file\ with\ \'single\ quotes\' martin@dogmeat ~/findtest % echo three > file\ with\ \"double\ quotes\" martin@dogmeat ~/findtest % ll insgesamt 12K -rw-rw-r-- 1 martin martin 6 Sep 17 12:01 file with "double quotes" -rw-rw-r-- 1 martin martin 4 Sep 17 12:01 file with 'single quotes' -rw-rw-r-- 1 martin martin 4 Sep 17 12:01 file with spaces
का उपयोग करते हुए
find -exec
बिनाsh -c
समस्याओं के बिना काम करने के लिए लगता है - यहाँ कोई आवश्यक उद्धृत:martin@dogmeat ~ % find findtest -type f -exec cat {} \; one two three
लेकिन जब मैं उपयोग कर रहा हूँ तो
sh -c
{}
किसी प्रकार के उद्धरण की आवश्यकता प्रतीत होती है:martin@dogmeat ~ % LANG=C find findtest -type f -exec sh -c 'cat {}' \; cat: findtest/file: No such file or directory cat: with: No such file or directory cat: spaces: No such file or directory cat: findtest/file: No such file or directory cat: with: No such file or directory cat: single quotes: No such file or directory cat: findtest/file: No such file or directory cat: with: No such file or directory cat: double quotes: No such file or directory
डबल कोट्स तब तक काम करते हैं जब तक कि किसी फ़ाइल नाम में डबल कोट्स न हों:
martin@dogmeat ~ % LANG=C find findtest -type f -exec sh -c 'cat "{}"' \; one two cat: findtest/file with double: No such file or directory cat: quotes: No such file or directory
सिंगल कोट्स तब तक काम करते हैं जब तक कि किसी फाइल के नाम में सिंगल कोट्स न हों:
martin@dogmeat ~ % LANG=C find findtest -type f -exec sh -c "cat '{}'" \; one cat: findtest/file with single: No such file or directory cat: quotes: No such file or directory three
मुझे ऐसा कोई समाधान नहीं मिला है जो सभी मामलों में काम करता हो। वहाँ कुछ है जो मैं देख रहा हूँ, या स्वाभाविक असुरक्षित sh -c
में उपयोग कर रहा हूँ find -exec
?
sh
, प्लेसहोल्डर किसी तरह का हो रहा है यह भी काम करता है, तो द्वारा प्रतिस्थापित_
उदाहरण के लिए - यदि आप बैश आंतरिक कॉल करना चाहते हैं बहुत उपयोगी:find /tmp -name 'fil*' -exec bash -c 'printf "%q\n" "$1"' _ {} \;
। लेकिन क्या किसी को पता है कि यह दस्तावेज कहां है?