প্রথমত, আপনি যা করার চেষ্টা করছেন l| grep <filename>
তা খারাপ। এটা করবেন না। কারণটা এখানে.
l
কমান্ড সত্যিই একটি উপাধি ls -CF
$ type -a l
l is aliased to `ls -CF'
উবুন্টু এর ডিফল্টরূপে bash
, ls
একটি ওরফে হয় ls --color=auto
। স্ট্যান্ড্রাইভার হিসাবে মন্তব্যগুলিতে নির্দেশিত হিসাবে --color=auto
রঙিনকরণ বন্ধ করার কথা রয়েছে। আপনার নির্দিষ্ট ক্ষেত্রে, আপনার আছে alias ls="ls -alh --color"
এবং alias l="ls -CF"
, যা মূলত সত্তা শেষ হয় ls -alh --color -CF
। স্যুইচগুলির এই বিশেষ সংমিশ্রণটি এখনও পাইপের উপরে রঙিন আউটপুট প্রেরণ করে। উদাহরণ স্বরূপ:
$ ls -alh --color -CF ~/TESTDIR | cat -A
^[[0m^[[01;34m.^[[0m/ ^[[01;34m..^[[0m/ 1.txt 2.txt 3.txt out.txt$
লক্ষ্য করুন যে ডিরেক্টরিগুলি .
এবং ..
ডিরেক্টরিগুলির মধ্যে কীভাবে একই অব্যাহতি রয়েছে।
এই সব এর অর্থ কি
এর অর্থ l
ফাইলের ধরণ অনুসারে ফাইলগুলির বর্ণযুক্ত তালিকা আউটপুট আসবে। সমস্যাটি হ'ল পালাবারের ক্রমগুলি ব্যবহার করে রঙিনতা ঘটে । এটি হ'ল 1:34m
জিনিসগুলি - তারা নির্দিষ্ট রঙের জন্য ক্রমগুলি পালাচ্ছে।
মূল সমস্যাটি হ'ল পার্সিং করা ls
প্রায়শই ভুল আউটপুট এবং স্ক্রিপ্টগুলিতে বিপর্যয়ের দিকে পরিচালিত করে, কেবলমাত্র এ কারণেই ls
পূর্ববর্তী এবং অন্যান্য বিশেষ অক্ষরের বর্ণনার মতো পালানোর ক্রমগুলির অনুমতি দেয়। আরও তথ্যের জন্য এই নিবন্ধটি দেখুন: http://mywiki.wooledge.org/ পার্সিংএল
আপনার কী করা উচিত:
find
কমান্ড ব্যবহার করুন :
bash-4.3$ ls
1.txt 2.txt 3.txt out.txt
bash-4.3$ find . -maxdepth 1 -iname "*1*"
./1.txt
আপনি শেল গ্লোব এবং আধুনিক পরীক্ষা [[
কমান্ড দিয়ে এরকম কিছু করতে পারেন :
bash-4.3$ for file in * ;do if [[ "$file" =~ "1" ]] ;then echo "$file" ;fi ; done
1.txt
অথবা অজগর ব্যবহার করতে পারেন, যার bash
একার চেয়ে অনেক বেশি ভাল ফাইল নাম পরিচালনা করার ক্ষমতা রয়েছে
bash-4.3$ python -c 'import os;print [f for f in os.listdir(".") if "1" in f ]'
['1.txt']
যদি আউটপুট প্রক্রিয়াজাতকরণের প্রয়োজন না হয় তবে ls
সাধারণ গ্লোব্বিং এর সাহায্যে কাজও করা ls
যায়। (মনে রাখবেন, এটি কেবল ফাইলগুলির তালিকা দেখার জন্য, আউটপুট পাঠ্যের সাথে মোকাবেলা করার জন্য এটি অন্য প্রোগ্রামে পাস করার জন্য নয়)
bash-4.3$ ls *1*
1.txt