একাধিক কমান্ড সহ xargs


6

আমি একের পর এক ফাইলের তালিকায় কমান্ডের ক্রম সম্পাদন করার চেষ্টা করছি। আমি ভাবছিলাম যে এর লাইনে xargs কিছু ব্যবহার করা সম্ভব কিনা

ls *.txt | xargs -n 1 -I {} cat {} | grep foo > {}.foo

কোথায়

cat {} | grep foo > {}.foo

প্রতিটি ফাইলের মধ্যে আমি যে আদেশটি প্রয়োগ করতে চাই তা হ'ল।

উত্তর:


7

এর লাইন বরাবর কিছু ব্যবহার করা সম্ভব হতে পারে

xargs -n1 -I[] sh -c 'cat {} | grep foo > {}.foo'

বা, অকেজো থেকে মুক্তি পেতে cat

xargs -n1 -I{} sh -c 'grep foo {} > ().foo'

এটি শেল স্ক্রিপ্টে রাখা সাধারণত সহজতর যাতে আপনি কেবল এটি ফাইলগুলি পাস করতে পারেন।

cat > fiddle.sh <<\EOF
for f in "$@"; do
  grep foo "$f" >"$f.foo"
done
EOF
ls *.txt | xargs sh fiddle.sh    # note we can now pass multiple files, no -n1 or -I needed

পেডেন্ট্রি: ফাইলের নামগুলিতে বিশেষভাবে অক্ষরযুক্ত lsনতুন লাইনগুলি সহ সঠিক কাজটি করবে না। আমি xargsপুরোপুরি ডাম্প করব , এবং (উপরের স্ক্রিপ্টটি দিয়েছি ) ঠিক তাই করব

sh fiddle.sh *.txt

অথবা এমনকি

for f in *.txt; do grep foo "$f" >"$f.txt"; done

ঠিক তখনই প্রম্পটে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.