The ls` কে কেবল বেস ফাইলের নাম মুদ্রণ করতে বলুন


21

এটি এর ডিফল্ট আচরণ ls

ls /net/nas/data/languages/pypm/sites/rex/free/2.6/*/pool/v/vi/virtual*1.4.4*pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/linux-x86/pool/v/vi/virtualenv-1.4.4_linux-x86_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/linux-x86_64/pool/v/vi/virtualenv-1.4.4_linux-x86_64_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/macosx/pool/v/vi/virtualenv-1.4.4_macosx_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/win32-x86/pool/v/vi/virtualenv-1.4.4_win32-x86_2.6_1.pypm

আমি কীভাবে lsকেবল বেসনামটি মুদ্রণ করব ? ভালো লেগেছে:

ls $OPTIONS /net/nas/data/languages/pypm/sites/rex/free/2.6/*/pool/v/vi/virtual*1.4.4*pypm
virtualenv-1.4.4_linux-x86_2.6_1.pypm
virtualenv-1.4.4_linux-x86_64_2.6_1.pypm
virtualenv-1.4.4_macosx_2.6_1.pypm
virtualenv-1.4.4_win32-x86_2.6_1.pypm

দ্রষ্টব্য : আমি find/ নেট / এনএএস / ডেটা / ভাষা / পিপিএম / সাইট / রেক্স / ফ্রি হিসাবে বিপুল সংখ্যক ফাইল এবং ডিরেক্টরি অন্তর্ভুক্ত করে শেল গ্লোববিং করতে পছন্দ করি ।


1
ডিরেক্টরিতে যখন প্রচুর ফাইল থাকে তখন আপনি কী ব্যবহার করে শেল গ্লোব্বিং পছন্দ করেন? টাইপো ??
আকির

1
আমি অনুমান করছি যে ওপি সাব-ডাইরেক্টরিগুলির একটি তালিকা চায় না, এবং পাস -maxdepth 1করার বিকল্পটি সম্পর্কে অসচেতন find
intuited

উত্তর:


19

যদিও xargs -0\ 0 (লাইক find -print0) দ্বারা সীমিত ইনপুটটির জন্য ব্যবহার করার উদ্দেশ্যে , lsতার আউটপুট এইভাবে সীমিত করার কোনও বিকল্প নেই।

যাহোক,

ls -1 /path/glob | tr '\n' '\0' | xargs -0 -n 1 basename

নতুন লাইনগুলি নালিতে রূপান্তর করার কৌশলটি করবে would এরপরে xargs শূন্যস্থানগুলির নামের সাথে কাজ করতে দেয়।

সম্পাদনা: -n 1xargs এ যুক্ত হয়েছে


এটি আমার পক্ষে কাজ করে না: basename: extra operand \ 033 [0 মি / নেট / নেট / এনএস / ডেটা / ভাষা / পিপিম / সাইটস / রেক্স / ফ্রি / 2.6 / ম্যাকোসেক্স / পুল / ভি / ভি / ভ্যুচুয়াল্নেভ-1.4.4_macosx_2.6_1.pypm \ 033 [ 0 মি'`
বলেছেন মনিকা

@ শ্রীধর: আপনি -n 1বিকল্প হিসাবে অন্য কোথাও পরামর্শ দেওয়া প্রয়োজন হতে পারে xargs? (উত্তর সম্পাদিত)
স্টিভ ফলি

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

যদি xargs এর ম্যাক সংস্করণটি -d(ডিলিমিটার) বিকল্পটিকে সমর্থন করে তবে আপনি এটি করতে পারেন ls ... | xargs -d '\n' -n 1 basename
intuited

12

আমি এটি ব্যবহার:

ls | tr '\n' '\n'

এটি একটি তালিকা দেয়:

file1.mp3
file2.mp3
file3.mp3
...

3
এটি মূলত ls -1(এবং রঙ করা অক্ষম) হিসাবে একই , যেমনটি lsটার্মিনালে লেখার সময় নয় lies দেখে মনে হচ্ছে আপনি পয়েন্টটি কিছুটা বাদ দিচ্ছেন, কারণ সমস্যাটি ওয়্যার্ড lsকার্ডগুলি ব্যবহার করে পাথ আর্গুমেন্ট নির্দিষ্ট করে দির নাম সোহেনটিকে সরিয়ে দিচ্ছে । ls -d "$PWD/"* | tr '\n' '\n'আসল সমস্যাটি কী তা দেখার চেষ্টা করুন ।
ড্যানিয়েল বেক

-1 - লোকেরা কেন এই উত্তরটিকে সমর্থন করে তা নিশ্চিত নয়। ls -1ড্যানিয়েল বেক নির্দেশ করেছেন, কেবল গ্লোব ব্যবহার করা হলেও এটি কাজ করে না এমনটি একই কাজ করে না।
slhck

-1 - এটি একইরকম ls -1এবং কেবল বর্তমান ডিরেক্টরিতে কাজ করে, এর মতো কোনও পথ দিয়ে নয় ls path/*
ব্রেন্ডন





1

আপনি বলেছিলেন যে আপনি গ্লোববিংকে বেশি পছন্দ করেন find, কিন্তু আপনি কি জানেন যে দুটি পরস্পর একচেটিয়া নয়? গ্লোব্বিং আপনার দ্বারা চালিত যে কোনও কমান্ডের উপর ঘটে ls। উদাহরণ স্বরূপ:

$ export BASE=/net/nas/data/languages/pypm/sites/rex/free/2.6

$ echo $BASE/*/pool/v/vi/virtual*1.4.4*pypm | xargs basename
$ ls $BASE/*/pool/v/vi/virtual*1.4.4*pypm | xargs basename
$ find $BASE/*/pool/v/vi/virtual*1.4.4*pypm -print0 | xargs -0 basename

লক্ষ্য করুন যে সন্ধানের উদাহরণটি প্রিন্ট 0-এর ব্যবহার করতে পারে যদি আপনার পাথগুলিতে সাদা স্থান থাকে (তবে tr অন্যত্র উল্লিখিত-ভিত্তিক সমাধানগুলি সাধারণ জায়গাগুলিতে দুর্দান্ত কাজ করে তবে প্রকৃত নিউলাইনযুক্ত ফাইলগুলিতে নয়) hand

শেষ অবধি, আপনার যদি জিএনইউ অনুসন্ধানে অ্যাক্সেস থাকে তবে আপনি প্রিন্টফ ব্যবহার করতে পারেন যা বেসনাম কলটি পুরোপুরি এড়িয়ে চলে:

$ find $BASE/*/pool/v/vi/virtual*1.4.4*pypm -printf '%f\n'

দুর্ভাগ্যক্রমে, -printfম্যাকোসএক্স সংস্করণে বিকল্পটি উপলভ্য নয় find
শ্রীদ বলছে মনিকাকে

ভাল কল; তদারকির জন্য দুঃখিত। আমি উত্তর আপডেট করেছি।
রায়ান উজ্জ্বল

-3

আপনার সমস্ত ফাইল এবং টাইপ করা ডিরেক্টরিতে যান।

find *.pypm

1
ওপি স্পষ্টভাবে ঘোষণা করে যে সে ব্যবহার করতে চায় না find
গ্রোনস্টাজ

1
এছাড়াও, এটি ওপি-র প্রয়োজন মতো করে না। (দ্রষ্টব্য: আপনার find . -name '*pypm'যদি আদৌ ব্যবহার করা উচিত ... কিছু অর্জন না করে কেবল ls *.pypm
গ্লোব লাগিয়ে রাখুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.