পাথ ছাড়াই কমান্ড থেকে কেবল কীভাবে নাম পাবেন


14

আমি অনুসন্ধান ব্যবহার করে অনুসন্ধান ফলাফল থেকে কেবল নামগুলি নেওয়ার চেষ্টা করছি, তবে এটি সর্বদা ডিরেক্টরিগুলিও অন্তর্ভুক্ত করে। আমি কীভাবে কেবলমাত্র নামগুলি মুদ্রণ করতে পারি (বা কোনও ভেরিয়েবলকে বরাদ্দ করি) using

find trunk/messages/ -name "*.po" -printf '%f\n'

এটি একটি ভেরিয়েবলের জন্য নির্ধারিত অনুরূপ কমান্ড যেমন "রিসোর্স" পরে এটি ব্যবহার করতে।

সম্পাদনা: এবং সম্ভব হলে কেবল এক্সটেনশন বাদ দিয়ে নাম।

উত্তর:


20

ব্যবহার find trunk/messages/ -name "*.po" -exec basename {} .po \;

উদাহরণ এবং ব্যাখ্যা:

কিছু পরীক্ষার ফাইল তৈরি করুন:

$ touch test1.po  
$ touch test2.po  
$ find . -name "*.po" -print
./test1.po  
./test2.po

ঠিক আছে, পথ সহ ফাইলগুলি পাওয়া যায়।

প্রতিটি ফলাফলের জন্য মৃত্যুদণ্ড কার্যকর করুন basenameএবং নামের .po অংশটি স্ট্রিপ করুন

$ find . -name "*.po" -exec basename \{} .po \;  
test1  
test2

দুর্দান্ত ধন্যবাদ :)। আমি কি ডায়ার্স থেকে কেবল পিও এক্সটেনশনটি কেড়ে নিতে পারি? মানে: dir1 / po1.po এবং dir2 / po2.po এগুলি dir1 / po1 এবং dir2 / po2 এর মতো পাওয়া যায়?
জাগুন

@ ব্যবহারকারী1754665find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
14

@ স্লাহ্ক ধন্যবাদ শেষ অবধি আমাকে ফাইল নামটি এক্সটেনশন ছাড়াই এবং সর্বশেষ ফোল্ডারে যেখানে পাওয়া উচিত তা পাওয়া দরকার: উদাহরণস্বরূপ: dir1 / subdir1 / subsubdir1 / po1.po এবং dir2 / subdir2 / subsubdir2 / po2.po একটি পরিবর্তনশীল হিসাবে সেট করা উচিত: সাবসুবডির 1 / po1 যথাক্রমে সাবসুবডির 2 / পো 2।
ওয়েকআপ 14

@ ব্যবহারকারী1754665 হুম, সম্ভবতfind . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
পিছু হট

@ হেনেস শেষ দিকে কোঁকড়া ধনুর্বন্ধনী খোলার আগে ব্যাকস্ল্যাশ করার উদ্দেশ্য কী find?
উত্কু

3

আপনি -execdirকোনও পরামিতি ব্যবহার করতে পারেন যা কোনও পাথ ছাড়াই ফাইলটি মুদ্রণ করবে, যেমন:

find . -name "*.po" -execdir echo {} ';'

এক্সটেনশন ছাড়াই ফাইলগুলি:

find . -name "*.txt" -execdir basename {} .po ';'

দ্রষ্টব্য: যেহেতু এটি পসিক্স নয়, বিএসডি findপরিষ্কার ফাইলের নাম মুদ্রণ করবে, তবে জিএনইউ ব্যবহার করে findঅতিরিক্ত মুদ্রণ করা হবে ./

দেখুন: জিএনইউ ফাইন্ড-এক্সেকডির কমান্ড বিএসডি অনুসন্ধানের চেয়ে আলাদা আচরণ করে কেন?


1

কমান্ডের ভিত্তিতে আমি এখানে পেয়েছি: http://www.unixcl.com/2009/08/remove-path-from-find-result-in-bash.html

আপনি এটি ব্যবহার করে এটি করতে পারেন sed(যা আমার basenameকাছে পদ্ধতির চেয়ে দ্রুত চালিত হয়েছিল ):

find trunk/messages/ -name "*.po" | sed 's!.*/!!' | sed 's!.po!!'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.