একটি ডিরেক্টরিতে প্রতিটি ফাইলের জন্য লিনাক্স শেল স্ক্রিপ্ট ফাইলের নামটি ধরুন এবং একটি প্রোগ্রাম চালান


85

পরিস্থিতি:

লিনাক্স সিস্টেমের একটি ফোল্ডার। আমি একটি ফোল্ডারে প্রতিটি .xls ফাইলের মধ্য দিয়ে লুপ করতে চাই।

এই ফোল্ডারে সাধারণত বিভিন্ন ফোল্ডার, বিভিন্ন ফাইল টাইপ (.sh, .pl, .csv, ...) থাকে।

আমি যা করতে চাই তা হ'ল মূলের সমস্ত ফাইল লুপ করা এবং কেবলমাত্র .xls ফাইলগুলিতে একটি প্রোগ্রাম চালানো।

সম্পাদনা করুন:

সমস্যাটি হ'ল। Xls থেকে .csv ফর্ম্যাটে রূপান্তর করতে আমার প্রোগ্রামটি এক্সিকিউট করতে হবে x সুতরাং, প্রতিটি .xls ফাইলের জন্য আমাকে ফাইলের নামটি ধরতে হবে এবং এটি .csv এ যুক্ত করতে হবে।

উদাহরণস্বরূপ, আমার কাছে একটি টেস্ট.এক্সলস ফাইল রয়েছে এবং xls2csv এর মাধ্যমে আর্গুমেন্টগুলি হ'ল: xls2csv test.xls test.csv

আমি কি বোধগম্য?

উত্তর:


200

বাশ:

for f in *.xls ; do xls2csv "$f" "${f%.xls}.csv" ; done

সাধারনভাবে সুন্দর! পুরোপুরি কাজ করে! তোমাকে অনেক ধন্যবাদ!
থিংকোড

6
একেবারে ভিন্ন কারণে আমি এটিই খুঁজছিলাম। একটি সামান্য সম্পাদনা, এবং এটি আমার নির্দিষ্ট প্রয়োজনের জন্য নিখুঁত। ধন্যবাদ = ডি এবং যার জন্য এটি কী করে তা পরিষ্কার নয়: $ {f% .ext the এক্সটেনশন ছাড়াই ফাইলের নাম প্রতিস্থাপন করে, সুতরাং এই উদাহরণে এটি "ফাইলের নাম.csv" রেন্ডার করে "ফাইলের নাম না দিয়ে"। xls.csv "।
ফ্রুঙ্গি

হেই আমি "লিনাক্স ফোরাচ txt ফাইল" গুগল করে এটি পেয়েছি। এটি আমার যা প্রয়োজন ছিল ঠিক তা-ই ছিল, আমি আসলে xls2csv ব্যবহার করার চেষ্টা করছিলাম কিন্তু অনুভব করেছি যে আমি এর জন্য কোনও ফলাফল খুঁজে
পাব

4
। f এর * * xls এর মান থাকবে যদি * .xls কোনও ফাইলের সাথে মেলে না। সমস্যা থাকলে আমার উত্তর যাচাই করুন।
অ্যান্ড্রুবর্জোয়া 18'17

অথবা আপনি nullglobলুপটি এড়িয়ে যাওয়ার জন্য ঠিক সেট করতে পারেন ।
ইগনাসিও ওয়াজকেজ-আব্রামগুলি

15
for i in *.xls ; do 
  [[ -f "$i" ]] || continue
  xls2csv "$i" "${i%.xls}.csv"
done

do"ম্যাচিং" ফাইলটি সত্যই উপস্থিত থাকলে চেকের প্রথম লাইনটি কারণ আপনার কোনও কিছু মিলছে না for, তবে do"* .xls" হিসাবে কার্যকর করা হবে $i। এটি আপনার জন্য ভয়াবহ হতে পারে xls2csv


13

খোঁজ কমান্ড।

আপনি যা খুঁজছেন তা হ'ল একরকম

find . -name "*.xls" -type f -exec program 

পোস্ট সম্পাদনা

find . -name "*.xls" -type f -exec xls2csv '{}' '{}'.csv;

কার্যকর করা হবে xls2csv file.xls file.xls.csv

আপনি যা চান তার কাছাকাছি।


find -maxdepth 1সাবফোল্ডারগুলি বাদ দিতে। এটি পরিবর্তে পরিবর্তিত test.xlsহয় । তাই না বেশ কি ওপি চাইলেন, কিন্তু চমত্কার বন্ধ। test.xls.csvtest.csv
প্রাক্তন

{}পুরো আর্গুমেন্টের চেয়ে আর্গুমেন্টের একটি স্ট্রিং হিসাবে ব্যবহার করা জিএনইউ এক্সটেনশন, যার জন্য POSIX স্পেস দ্বারা গ্যারান্টি নেই find। এই হিসাবে, এই উত্তরটি অ-জিএনইউ প্ল্যাটফর্মগুলির জন্য অগত্যা পোর্টেবল নয়।
চার্লস ডাফি

4
find . -type f -name "*.xls" -printf "xls2csv %p %p.csv\n" | bash

বাশ 4 (পুনরাবৃত্তি)

shopt -s globstar
for xls in /path/**/*.xls
do
  xls2csv "$xls" "${xls%.xls}.csv"
done

দুর্দান্ত সমাধান। আমি এইচডিএমএল / এসএসএস লিখতে এবং নোড.জেএস প্রকল্পের ডিজাইনের সময় এইচটিএমএল / সিএসএস তৈরি করার অনুমতি দেওয়ার জন্য এটি ব্যবহার করেছি।
ক্রিস কেম্প

4
এটি সম্পূর্ণ বিপজ্জনক যদি আপনি নিজের ফাইল $(rm -rf /)নামগুলিতে ... বা কেবল শ্বেত স্পেসের মতো জিনিস না রাখেন তা বিশ্বাস না করেন ।
চার্লস ডাফি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.