Files (ব্যাকআপ ফাইল) দিয়ে শেষ হওয়া ফাইলগুলির তালিকা বর্জন করুন


20

আমার প্রয়োজন হ'ল ~(ব্যাকআপ ফাইল) দিয়ে শেষ হওয়া ফাইলগুলি বাদ দিয়ে সমস্ত ফাইল ডিরেক্টরিতে অন্তর্ভুক্ত করা ।

আমি কমান্ডটি ব্যবহার করার চেষ্টা করেছি:

ls -l | grep -v ~    

আমি এই আউটপুট পেতে:

asdasad
asdasad~
file_names.txt
normaltest.txt
target_filename
testshell1.sh
testshell1.sh~
testshell2.sh
testshell2.sh~
testtwo.txt
testtwo.txt~
test.txt
test.txt~

আমি কেবল এই ফাইলগুলি পেতে চাই:

asdasad
file_names.txt
normaltest.txt
target_filename
testshell1.sh
testshell2.sh
testtwo.txt
test.txt

দেখে মনে হচ্ছে আপনি কোনও ফাইলের তালিকা শেষ করে এড়িয়ে যাওয়ার চেষ্টা করছেন ~। এই ফাইলগুলি ব্যাকআপ ফাইলগুলি আমার কিছু পাঠ্য সম্পাদক তৈরি করেছে।
ctrl-alt-delor

আপনি কোন অপারেটিং সিস্টেমটি ব্যবহার করছেন: এটি কোনও গুনু / লিনাক্স (যেমন দেবিয়ান, উবুন্টু, রেডহ্যাট, সেন্টোস, ফেডোরা, সুস, মিন্ট, আর্চ,…)?
ctrl-alt-delor

2
দ্রষ্টব্য যে আপনি যে ফাইলটি উপেক্ষা করতে চান তা ইমাক্স ব্যাকআপ ফাইল হিসাবে মনে হচ্ছে। ইমাকস আচরণটি বদলে নেওয়া সহজ, যাতে এটি কেন্দ্রিয় ডিরেক্টরিতে ব্যাকআপগুলি সঞ্চয় করে এবং সমস্ত জায়গা জুড়ে না; emacs.stackex بدل.com
কিলিয়ান ফুট

আমি দুঃখিত বলতে চাই তবে আমি আপনাকে বিশ্বাস করি না; ls -l(লেটার ইল) তালিকাভুক্ত প্রতিটি ফাইলের অনুমতি, এনলিঙ্কস, মালিক, আকার এবং মোডটাইম অন্তর্ভুক্ত করবে। আপনার প্রদর্শিত আউটপুটটি কী উত্পাদিত হবে তা হ'ল ls -1(এক অঙ্কের) এবং অনেক সিস্টেমে টার্মিনালে-1 একক-কলাম আউটপুট তৈরি করার প্রয়োজন হয় , তবে যখন পাইপ করা হয় (যেমন এখানে করা হয় ) বা পুনঃনির্দেশিত করা হয় না, এটি ইতিমধ্যে একক-কলাম হয় । lsgrep-1
dave_thompson_085

@ dave_thompson_085 আমি সমস্ত পাঠ্য কেটে ফেলেছি এবং কেবল এখানে নাম ফাইল করছি .. কারণ আমি অনুভব করেছি যে এটি অপ্রাসঙ্গিক। এবং এটি একটি উত্পাদন ব্যবস্থা (আমার নিজস্ব সিস্টেম নয়)। সুতরাং আমি ব্যবহারকারীর নাম, বিশদ এবং সেগুলি ফাঁস করতে চাই না।
কৌতূহলী_আজ

উত্তর:


49
ls -l | grep -v ~

এটি কাজ না করার কারণটি হ'ল টিল্ডটি আপনার হোম ডিরেক্টরিতে প্রসারিত হয়, তাই grepকখনই আক্ষরিক টিলড দেখতে পায় না। (উদাহরণস্বরূপ টিলডে সম্প্রসারণে বাশের ম্যানুয়াল দেখুন )) সম্প্রসারণ রোধ করার জন্য আপনাকে এটিকে উদ্ধৃত করতে হবে, যেমন

ls -l | grep -v "~"

অবশ্যই এটি কোনও ফাইলের নামের মাঝখানে বা lsআউটপুটে অন্য কোথাও টিলড সহ যে কোনও আউটপুট লাইন সরিয়ে ফেলবে (যদিও এটি সম্ভবত ব্যবহারকারীর নাম, তারিখ বা এ জাতীয় ব্যবহারের সম্ভাবনা নাও রয়েছে)। আপনি যদি কেবলমাত্র টিলড দিয়ে শেষ হওয়া ফাইলগুলি উপেক্ষা করতে চান তবে আপনি ব্যবহার করতে পারেন

ls -l | grep -v "~$"

48

GNU বাস্তবায়ন ls(বেশিরভাগ লিনাক্স সিস্টেমে পাওয়া যায়) এর জন্য একটি বিকল্প রয়েছে: -Bব্যাকআপগুলি উপেক্ষা করুন:

ls --ignore-backups

24

আপনি যদি ব্যাশ ব্যবহার করছেন তবে নিশ্চিত হয়ে নিন যে extglobএটি সক্ষম হয়েছে:

shopt -s extglob

তারপরে আপনি ব্যবহার করতে পারেন:

ls -d -- !(*~)
  • -d ডিরেক্টরিগুলির বিষয়বস্তু না দেখানোর জন্য
  • !(*~) শেষ হওয়া ফাইলগুলি বাদে সমস্ত ফাইল ~

Zsh এ, আপনি kshglobবিকল্পটি বা নিজস্ব বর্ধিত গ্লোবগুলি ব্যবহার করে এটি করতে পারেন :

setopt extended_glob
ls -d -- ^*~

যেহেতু বাদ দেওয়ার প্রত্যয়টি কেবল একটি অক্ষর দীর্ঘ, আপনি শেষের অক্ষরটি টিলড না এমন ফাইলের সাথেও মিল ফেলতে পারেন (এটি ছাড়াও কাজ করা উচিত extglob):

ls -d -- *[^~]

তবে সাধারণ ধারণাটি ব্যবহার করা ls --ignore-backups


12

এটির সাহায্য করা উচিত:

ls -l | grep -v '~'  

কারণ: কমান্ড কার্যকর হওয়ার আগে home চরটি আপনার হোম ডিরেক্টরি দ্বারা প্রতিস্থাপন করা হবে। চেষ্টা

echo ~

এবং

echo '~'

6

অন্যান্য উত্তরে যেমন উল্লিখিত হয়েছে যে আপনার সম্ভবত সমস্যা হওয়ার কারণ হ'ল আপনি টিলডটি উদ্ধৃত করেননি বা এড়ালেন না।

একটি নির্দিষ্ট ব্যবহারের ক্ষেত্রে আমি শেল ফাইলনাম এক্সপেনশন ব্যবহার করেছি অনুরূপ কিছু করতে। আমি ২০০৩ সাল থেকে এটি ব্যবহার করে আসছি যার অর্থ এটি বিভিন্ন ধরণের সিস্টেমে বিভিন্ন ধরণের শেল প্রয়োগের কাজ করে। (আমি এখানেও ব্যবহার করি -Cকারণ আমি সাজানো কলামগুলিতে একটি দুর্দান্ত প্রদর্শন চাই)

ls -C *[!~]

(শেল ফাইলনাম এক্সপেনশন ব্যবহারের একটি সীমাবদ্ধতা অবশ্যই হ'ল খুব বড় সংখ্যক (নন-ব্যাকআপ) ফাইলযুক্ত ডিরেক্টরিটি উপলব্ধ আর্গুমেন্ট তালিকার আকারকে ছাড়িয়ে যেতে পারে, যদিও বেশিরভাগ আধুনিক সিস্টেমে এই সীমাটি প্রায়শই বেশি, প্রায়শই 250 কেবি বা আরও বেশি কিছু সময়)


1

ls | grep -v '~$'দ্রুত সমাধান। এটি সমস্ত (গোপনীয় নয়) ফাইলগুলির তালিকাতে ls ব্যবহার করে, তারপরে -vটিলড ( ~) এর সাথে সমস্ত লাইন ( ) শেষে ( $) বাদ দেওয়ার জন্য গ্রেপ ব্যবহার করে (উল্টানো মিল, অর্থাত্ বর্জন )।

যাইহোক, যদি আপনার কাছে কোনও ফাইলের নাম 1, কিছু 2 এর মতো নাম থাকে তবে এটি একটি বিশাল গন্ধযুক্ত সূচক যে আপনার একটি খারাপ ওয়ার্কফ্লো রয়েছে, যা আপনার উত্সে ঠিক করা উচিত, কীভাবে এলএস কাজ করে তা পরিবর্তনের মতো আড়ম্বরপূর্ণ হ্যাক দিয়ে নয় with

যদি আপনি নিজেকে টেস্ট 1 এবং টেস্ট 2 বা টেস্টোন এবং টেস্টটো এর মতো সংস্করণ সংখ্যার সাথে ফাইলগুলির নামকরণ করতে দেখতে পান তবে আপনি যা চান তা হ'ল একটি সংস্করণ নিয়ন্ত্রণ ব্যবস্থা git

এটি বিশেষত আপনার ক্ষেত্রে সত্য যেখানে আপনার একাধিক ফাইলের একাধিক সংস্করণ রয়েছে এবং সংস্করণটিকে সমস্ত ফাইলের মধ্যে সমন্বয় করা দরকার বলে মনে হয়।

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

একবার আপনি এই সেট আপ হয়ে গেলে, আপনার আর সম্পাদকের কাছ থেকে আপনার আর ব্যাকআপ ফাইলের প্রয়োজন হবে না, কারণ সংস্করণ নিয়ন্ত্রণের ফাইলগুলির ইতিহাস রয়েছে যখন আপনি এটি ব্যবহার শুরু করেছিলেন, তখন থেকেই আপনি হাজার পরিবর্তন করে ফেলেছেন কিনা। এমনকি ইতিহাসের টাইমলাইনটি "শাখা" করতে পারেন, একটি নতুন ধারণা চেষ্টা করে, এবং সময়ে ফিরে যেতে পারেন এবং তারপরে আপনার প্রয়োজন হলে আলাদা ধারণাটি ব্যবহার করার জন্য এগিয়ে যেতে পারেন।


1

যদিও অনেক উত্তর সঠিক (আমি @Foonবিশেষত এর একটি পছন্দ করি ), তবে আমি নোট করব যে নামেরগুলির সাথে তালিকা পাওয়া ls -lবিভিন্ন কারণে কিছুটা খোঁড়া।

ফাইল খুঁজে পেতে সঠিক টুল, unsurprisingly হয় find

এর একটি আপশট হ'ল এটি নিজেই "নির্বাচন যুক্তি" পরিচালনা করতে সক্ষম হয়, উদাহরণস্বরূপ:

$ find . -maxdepth 1 \( -type f -a \! -name '*~' \) -print

যা আক্ষরিকভাবে বলে find:

  1. বর্তমান ডিরেক্টরিতে ফাইলগুলি সন্ধান করুন: .
  2. কেবলমাত্র সেই ডিরেক্টরিটির স্তরে তাদের সন্ধান করুন is অর্থাৎ পুনরাবৃত্তি করবেন না: -maxdepth 1
  3. সেখানে সত্তা সন্ধান করুন, যা

    • টাইপ ফাইল: -type f
    • এবং: -a
    • যার নামগুলি শেষ হয় না ~: ! -name *~ (যেখানে !ফাইলের নামের সাথে মেলে নিম্নলিখিত নির্দেশকে উপেক্ষা করা হয় -name *~)।

    (টাইপ উপর পুরো ম্যাচ করতে এবং একটি লজিক্যাল ইউনিট হিসাবে প্রদর্শিত NAME কে তার সাথে আলাদা হচ্ছে (এবং ))।

  4. পাওয়া প্রতিটি ফাইলের নাম মুদ্রণ করুন: -print

আপনাকে শেল দ্বারা ব্যাখ্যা করা থেকে শেলের জন্য বিশেষ কিছু অক্ষর রক্ষা করতে হবে এবং এজন্যই প্রথম বন্ধনী এবং ঠুং ঠুং !শব্দগুলি, ব্যাকস্ল্যাশ-পলায়নযোগ্য এবং নাম প্যাটার্নটি *~একক উদ্ধৃতি দ্বারা বেষ্টিত রয়েছে।

findকমান্ড তার অপশনের ব্যবহার মাধ্যমে একটি খুব শক্তিশালী মিনি ভাষার ভোগদখল। উদাহরণস্বরূপ, এটি পুনরাবৃত্তভাবে একটি সম্পূর্ণ ফাইল সিস্টেম ট্রি (বা গাছ) প্রক্রিয়া করতে বলা যেতে পারে তবে স্ক্যান করার সময় নির্দিষ্ট ডিরেক্টরি বাদ দিন। ফাইলগুলির বেশ কয়েকটি বৈশিষ্ট্যের সাথে মিল রাখা সম্ভব — যেমন তৈরি বা পরিবর্তনের সময় বা যা কিছু তার আকার as

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.