লিনাক্সে ফাইলগুলি সন্ধান করুন এবং নির্দিষ্ট ডিরেক্টরিগুলি বাদ দিন


14

আমি এর মত দেখতে একটি সন্ধান পেয়েছি:

rm -f crush-all.js
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | while read line
do
   cat "$line" >> crush-all.js
   echo >> crush-all.js
done

আমি অনুসন্ধানে "টেস্ট" নামক ডিরেক্টরিটি বাদ দিতে যুক্ত করতে চাই তবে কীভাবে "-type d" যুক্ত করবেন তা আমি বুঝতে পারি না। আমি কীভাবে এটি করতে যাব?

ধন্যবাদ!

উত্তর:


22

অপারেটরের -pathসাথে এটি সন্ধান এবং একত্রিত করতে আপনি বিকল্পটি ব্যবহার করতে পারেন -not

find . ! -path "*/test/*" -type f -name "*.js" ! -name "*-min-*" ! -name "*console*"

দুটি জিনিস নোট করুন

  • -path প্রথম যুক্তি হিসাবে আসতে হবে
  • প্যাটার্নটি পুরো ফাইলের সাথে -path testমেলে , তাই কখনও কোনও কিছুর সাথে মেলে না

যাইহোক, আপনি কেন বন্ধনী ব্যবহার করছেন তা আমি নিশ্চিত নই, এটি কোনও পার্থক্য করে না। এটা শুধুমাত্র, প্রাধান্য জন্য ব্যবহার করা হয় যেমন নির্মান জন্য ! \( -name '*bla*' -name '*foo*' \)(যে জিনিষ আছে উভয় খুঁজে না blaএবং foo)।

আরও পরিমার্জন: ব্যাশ লুপ ব্যবহার করার দরকার নেই, আপনি কেবল পারেন

find . ... -exec cat {} \; -exec echo \;

যেখানে ... অন্যান্য যুক্তি find


2
find / -path ./test -prune -o ...

./testআপনার পরীক্ষার ডিরেক্টরিটির অবস্থানের জন্য পুনরায় নামকরণ করুন ।


2
এই ক্ষেত্রে অ্যাড-প্রিন্ট ক্রিয়াটি ভুলে যাবেন না (কারণ -প্রিন্টটি ডিফল্ট ক্রিয়া নয়) -উ বিকল্পটি
বিল ঝাও

1

আপনি এইভাবে গ্রেপ দিয়ে চেষ্টা করতে পারেন (এখানে ফোল্ডারের নাম দেওয়া হয়েছে টেস্ট_ফোল্ডার):

find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "/path/to/test_folder/" | while read line

বা যদি আপনার সন্ধানটি আপেক্ষিক পথে ফিরে আসে:

find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "./relative_path/to/test_folder/" | while read line

অথবা আপনি যদি চান যে সমস্ত ফোল্ডারগুলির একই নাম রয়েছে তবে বিভিন্ন পথ রয়েছে

find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "/test_folder/" | while read line

শুভেচ্ছান্তে,


1

আমি @CharlesClavadetscherতার উত্তর দিয়ে যাচ্ছিলাম তার প্রসারিত করা । আপনি যদি কোনও পথ বাদ -not -path ... findদেন তবে পথটি অবতরণ অবিরত থাকবে। পরিবর্তে, ব্যবহার করা -pruneএটিকে আরও দ্রুত বাদ দিয়ে বাদ দেওয়া পথে আরও নামা থেকে বিরত রাখবে। সুতরাং আপনি যেমন কিছু করতে পারেন

find . -path '*test/*' -prune -o -type f -name "*.js" ! -name "*-min*" ! -name "*console*" -print

0

আমি যখন কেবল কোনও ফাইল অনুসন্ধান করি তখন আমি "হোলেনাম না" ব্যবহার করি। -name প্রকৃত ফাইলের নাম পরীক্ষা, কিন্তু -wholename সম্পূর্ণ পাথ পরীক্ষা। সুতরাং উপরের প্রশ্নে পরীক্ষার জন্য উপেক্ষা যুক্ত করুন:

find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) ! -wholename "*test*"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.