আমি কয়েকটি ফাইলগুলিতে ব্যবহার 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"' _ {} \;
। তবে কেউ কি জানেন যে এটি কোথায় নথিভুক্ত?