ফাইলের তালিকায় ফাইলগুলি দেওয়া স্ট্রিংয়ের সাথে মেলে না List


16

আমার একটি ডিরেক্টরি রয়েছে যেখানে নাম সহ প্রচুর ফাইল (প্রায় ২০০) প্রায় temp_log.$$বেশ কয়েকটি গুরুত্বপূর্ণ ফাইল তৈরি করা হয়েছে যা আমাকে যাচাই করা দরকার।

আমি কীভাবে সহজেই সমস্ত ফাইল তালিকাভুক্ত করতে এবং temp_log.$$ফাইলগুলি প্রদর্শিত হতে বাদ দিতে পারি?

প্রত্যাশিত আউটপুট

$ ls -lrt <exclude-filename-part>
-- Lists files not matching the above given string

আমি lsম্যান পেজ পেরিয়ে গিয়েছি তবে এই রেফারেন্সে কিছুই খুঁজে পেলাম না। আমি এখানে কোনও গুরুত্বপূর্ণ তথ্য মিস করেছি কিনা দয়া করে আমাকে জানান।

ধন্যবাদ


বেসে, ls --hide='temp_log.$$'কাজ করা উচিত। পুরো টার্মের কোন অংশটি তা নির্ভর করে আপনি ওয়াইল্ডকার্ডের সাহায্যে এটিকে প্রসারিত / করতে পারেন temp_log.$$
erch

উত্তর:


25

জিএনইউ ls(এম্বেডড লিনাক্স এবং সাইগউইনের সংস্করণ, কখনও কখনও অন্য কোথাও পাওয়া যায়) দিয়ে ডিরেক্টরিকে তালিকাবদ্ধ করার সময় আপনি কিছু ফাইল বাদ দিতে পারেন।

ls -I 'temp_log.*' -lrt

(দীর্ঘ ফর্ম নোট -Iহয় --ignore='temp_log.*')

Zsh এর সাহায্যে আপনি শেলটিকে ফিল্টারিং করতে দিতে পারেন। পাশ -dথেকে lsমিলেছে ডিরেক্টরি বিষয়বস্তু তালিকা এড়াতে তাই।

setopt extended_glob          # put this in your .zshrc
ls -dltr ^temp_log.*

Ksh, bash বা zsh এর সাহায্যে আপনি ksh ফিল্টারিং সিনট্যাক্স ব্যবহার করতে পারেন। Zsh এ, setopt ksh_globপ্রথমে চালান । ব্যাশে shopt -s extglobপ্রথমে চালান ।

ls -dltr !(temp_log.*)

দয়া করে, GNU ls এর উদাহরণে একক উদ্ধৃতি নয়: ls -I 'টেম্প লগ *
শার্গাররা

উবুন্টু বাশ v4.3.38 এ, -Itemp_log.*এটি কোনও স্থান ছাড়াই হওয়া উচিত-I
ইয়ান কিং ইয়িন

1
@ ইয়ঙ্কিংইন না, এর পরেও জায়গা রাখা ভাল -I। যাইহোক, *প্রয়োজন এক বা অন্য উপায় উদ্ধৃত করা প্রয়োজন। -I temp_log.*কাজ করে না কিন্তু -I 'temp_log.*', -I "temp_log.*", -I temp_log.\*, ইত্যাদি জরিমানা হয়।
গিলস 'অশুভ হওয়া বন্ধ করুন'

10

আপনি grepবিকল্পটি ব্যবহার করতে পারেন -v

ls -lrt | grep -v <exclude-filename-part>

1
নিশ্চিত হলেন না কেন এটি হ্রাস পেয়েছে, এটি সঠিক উত্তর।
টিম কেনেডি

5
এলএস আউটপুটটিতে গ্রেপ করা সর্বদা সঠিক নয় এবং এটি সুপারিশ করা হয় না। এর পার্শ্ব প্রতিক্রিয়া রয়েছে। সঠিক সমস্যাগুলি স্মরণ করতে সক্ষম নয়। পার্শ্ব দ্রষ্টব্য - ডাউন ভোট আমার কাছ থেকে ছিল না;)
এমটিকে


3

আপনি এটির findজন্য ব্যবহার করতে পারেন :

find . \! -name 'temp_log*'

এটি কেবল নামগুলি মুদ্রণ করবে, আপনি টাইমস্ট্যাম্প এবং অনুমতি দিয়ে -lsএকটি ls -lস্টাইল আউটপুট তৈরি করতে যোগ করতে পারেন বা -exec ls {} +কলাম, বাছাইকরণ ইত্যাদির জন্য আপনি যা চান বিকল্পগুলি সহ আসলে এলএস ব্যবহার করতে পারেন use

আমি এটি ধরে নিয়ে এটি লিখেছিলাম এটি কেবল একটি ডিরেক্টরিতে ফাইল ছিল। ডিরেক্টরিতে যদি অন্য ডিরেক্টরি থাকে তবে আপনি এগুলি পুনরাবৃত্তভাবে তালিকাবদ্ধ করা এড়াতে চাইতে পারেন

find . \! -name 'temp_log*' -maxdepth 1

এবং আপনি যদি এলএস ব্যবহার করেন তবে ডিরেক্টরিতে এটি তালিকাবদ্ধ করা থেকে বিরত রাখতে আপনি -d বিকল্পটি পাস করতে চান :-exec ls -d {} +


সম্ভবত অপরিবর্তনীয় -maxdepth 1নকল করতে চান ls
jw013

খুশী হলাম। যে ব্যবহারকারীরা বেশি ন্যূনতম পসিক্স findছাড়াই -maxdepth তাদের এখানে দেখতে হবে
ওয়াইল্ডকার্ড

2

আমি মনে করি আপনি শেলের একটি বৈশিষ্ট্য ব্যবহার করতে চান, এর নয় ls। আমি ব্যাশ ব্যবহার করি, তাই আপনি যা চান তা পরীক্ষা করে দেখেছি man bash। "P এক্সপ্যানিশন" অনুসন্ধান করুন ('/' টিপে প্রথমে টিপে)। উদ্ধৃতাংশ:

সম্প্রসারণ

    কমান্ড লাইনে এটি শব্দগুলিতে বিভক্ত হওয়ার পরে সম্প্রসারণ করা হয়। এখানে সাত ধরণের সম্প্রসারণ করা হয়: ব্রেস এক্সপেনশন , টিলডে এক্সপেনশন , প্যারামিটার এবং ভেরিয়েবল এক্সপেনশন , কমান্ড সাবস্টিটিউশন , পাটিগণিতের সম্প্রসারণ , শব্দ বিভাজন এবং পথের নাম সম্প্রসারণ

   ︙
... <স্নিপ> ...
   ︙

পথের নাম সম্প্রসারণ

    শব্দ বিভাজন পর, যদি না -f বিকল্প সেট করা হয়েছে, ব্যাশ অক্ষরের জন্য প্রতিটি শব্দ স্ক্যান *, ?এবং [। যদি এই চরিত্রগুলির মধ্যে একটি উপস্থিত হয়, তবে শব্দটি একটি প্যাটার্ন হিসাবে বিবেচনা করা হবে এবং প্যাটার্নের সাথে মিলে যাওয়া ফাইলের নামের বর্ণমালা অনুসারে বাছাই করা তালিকার সাথে প্রতিস্থাপন করা হবে। ...

আমি সম্প্রতি তাদের প্রথম অক্ষরের উপর ভিত্তি করে ফাইলগুলি বাদ দেওয়া শুরু করেছি, যেমন একটি কমান্ড দিয়ে:

$ ls ./[^t]*

এই চিঠিটি দিয়ে শুরু হয় না এমন কিছু মিলবে t। যদি আপনি বন্ধনীগুলির মধ্যে আরও অক্ষর যুক্ত করেন তবে আপনি সেই অক্ষরগুলি দিয়ে শুরু হওয়া ফাইলগুলিও বাদ দিন।

একটি লিঙ্ক খুঁজছেন, এবং আমি একটি ভাল আছে! প্যাটার্ন ম্যাচিং দেখুন । সেখান থেকে, এটি আপনার ক্ষেত্রে কাজ করবে:

$ ls -lrt ./!(temp_log.*)

এর জন্য গিলস দ্বারা বর্ণিত বিল্টিন ( ) extglobব্যবহার করে শেল বিকল্পটি সক্ষম করা দরকার ।shoptshopt -s extglob


-1

শুধু কর

ls -ltr `grep -il patterntosearch  *`

grepফাইলের নামের চেয়ে একটি ফাইলের মধ্যে একটি প্যাটার্ন অনুসন্ধান করে।
23:53

-2

ফাইল যেহেতু আপনি আত মুদ্রিত চাই "temp_log।" আছে ফাইলনেমে, তারপরে গ্রেপ দিয়ে ফিল্টার করুন:

ls -lrt | grep -v "temp_log."

দ্রষ্টব্য: অনুরূপ উত্তর সহ অন্য পোস্টটি সম্ভবত নিম্নচোটিত হয়েছে কারণ গ্রীপের সন্ধান করা উচিত স্ট্রিংয়ের চারপাশে "" উদ্ধৃতিগুলি ব্যবহারকারী অন্তর্ভুক্ত করেনি। উক্তি ব্যতীত, এটি বিজ্ঞাপন হিসাবে কাজ করে না।


আপনার 'নোট' কঠোরভাবে সঠিক নয়। কিছু নির্দিষ্ট অক্ষর রয়েছে যা উদ্ধৃত করার প্রয়োজন হতে পারে তবে আমি মনে করি না যে সেই নির্দিষ্ট স্ট্রিংয়ের কোনও আছে।
স্মোকস 2345

একটি ব্যবহারকারী বা গ্রুপ "temp_log" নামে আছে যতক্ষণ না (Regex মধ্যে ডট একটি স্থান বা আপনার পছন্দের যেকোন নিম্নলিখিত মেলে দিবে temp_logএটি একটি ভাল (সাধারণ) পথ বাদ দেওয়ার নয়। lsফলাফল নেই।
জেফ স্ক্যালার হলেন

কেবলমাত্র -F, @ স্মোকস 2345; একটি পিরিয়ড একটি বেসিক নিয়মিত প্রকাশের যে কোনও অক্ষরের সাথে মেলে। দেখুন: unix.stackexchange.com/q/119905/117549
জেফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.