আমি লিনাক্সে প্রতি আউটপুট লাইনে একটি ফাইল নাম কীভাবে তালিকাবদ্ধ করব?


229

আমি ls -aডিরেক্টরিতে ফাইলের নাম পেতে কমান্ডটি ব্যবহার করছি তবে আউটপুটটি একটি লাইনে রয়েছে in

এটার মত:

.  ..  .bash_history  .ssh  updater_error_log.txt

আমার কাছে একটি নতুন লাইনে ফাইলের নাম পেতে একটি বিল্ট-ইন বিকল্প দরকার:

.  
..  
.bash_history  
.ssh  
updater_error_log.txt

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

2
@ জুলিয়ানো - এটি আসলে অজগর লিপিটি গ্রাস করা উচিত। কেন আপনি এটিকে একটি ভুল সরঞ্জাম বলছেন?
ফিক্সক্সিক্সার

1
@ ফিক্সেক্সার যে মুহুর্তে আপনি পাইথনকে পাইপ lsকরবেন, lsআমার উত্তরে আমি যেমন বর্ণনা করেছি প্রতি লাইনে একটি ফাইল আউটপুট দেবে।
পিটার জি।

6
@ ফিক্সক্সিক্সার: তাহলে আপনি সত্যই এটি ভুলভাবে ব্যবহার করছেন। এটি ব্যবহারকারী টার্মিনালে আউটপুট জন্য তালিকা ফর্ম্যাট করে। এটি ফাইলের নামের মধ্যে বিশেষ অক্ষরগুলি প্রতিস্থাপন করতে পারে, এটি এমন অক্ষরগুলি বাদ দিতে পারে যার বিশেষ অর্থ ইত্যাদি রয়েছে ... অন্য কথায়, ls ব্যবহারকারীর জন্য একটি তালিকা বিন্যাস করে । আপনি ফর্ম্যাট করা ফাইলের নাম চান। আপনি অজগর 'গ্লোব' মডিউলটি ব্যবহার করছেন না এমন কোনও বিশেষ কারণ? docs.python.org/library/glob.html 'fnmatch', 'dircache' এবং অন্যান্য রয়েছে।
জুলিয়ানো

@fixxer আপনি আসলে করেছেন lsআউটপুট করতে pythonএবং পাইথন একক লাইন আউটপুট পরিলক্ষিত?
পিটার জি।

উত্তর:


430

-1বিকল্পটি ব্যবহার করুন (নোট করুন এটি একটি "এক" অঙ্কের, ছোট হাতের অক্ষর "এল" নয়) এটির মতো:

ls -1a

প্রথমে, আপনার lsসমর্থনগুলি নিশ্চিত করুন -1। জিএনইউ কোর্টিলস (স্ট্যান্ডার্ড লিনাক্স সিস্টেমে ইনস্টল করা) এবং সোলারিস ডু; কিন্তু সন্দেহ থাকলে, ব্যবহার man lsবা ls --helpবা ডকুমেন্টেশন চেক করুন। উদাহরণ:

$ man ls
...
       -1     list one file per line.  Avoid '\n' with -q or -b

2
+1 আমি -1 সম্পর্কে জানতাম না (-এল হ্যাঁ (এক নয়)) এটি ম্যান-পেজে দেখায় তবে আমি পুরোটা সময় এটি পড়ছি :)
স্ল্যাশমেস

@ স্ল্যাশমাইস - আহ, ভাল বিষয় - ভুল করা সহজ। আমি উত্তরে স্পষ্ট করেছিলাম।
বার্ট এফ

1
@ ডিটিআই: জিএনইউর জন্য, আপনি এই ডকুমেন্টটি ls --helpআউটপুটটিতে পাবেন ... সর্বদা ইনস্টল ;-)
টনি ডেলরয়

3
এর জন্য গুগলে অনুসন্ধান করা linux ls one file per lineএবং এটি শীর্ষ নিবন্ধ ছিল। বিশ্বাস করা যায় না যে নির্বাচিত উত্তরটি কতটা স্পষ্টবাদী বা এই জবাবটি বিড়ালকে পাইপের চেয়ে কম ভোট পেয়েছে has ls -1FTW।
ক্র্যানটোক

3
ls-1আচরণে ডিফল্ট যখন আউটপুট টার্মিনালের সাথে সংযুক্ত থাকে না।
কোডফোরস্টার

131

হ্যাঁ, আপনি সহজেই lsপ্রতি লাইনে আউটপুট একটি ফাইল নাম তৈরি করতে পারেন :

ls -a | cat

ব্যাখ্যা: lsআউটপুটটি টার্মিনালে বা কোনও ফাইল বা পাইপে আউটপুট হয় এবং সেই অনুসারে অ্যাডজাস্ট হয় The

সুতরাং, ls -aআপনি অজগর থেকে পাইপ করলে এটি কোনও বিশেষ ব্যবস্থা ছাড়াই কাজ করা উচিত।


2
বাহ, এটি উজ্জ্বল। গৃহীত উত্তরের উপর সুবিধা - এটি আসলে অ্যান্ড্রয়েড / অ্যাডবি শেলটিতে কাজ করে - যেখানে lsকেবল কিছু স্ট্রিপড ডাউন সংস্করণ তাই সমর্থন করে না-1
মেকিলমানস

আপনি কিভাবে এড়ানো হবে .এবং .."ফাইল" যদিও আউটপুটে দেখাচ্ছে?
ম্যাটানস্টার

@ ম্যান্ট্যান্সার: এটি নির্ভর করে, আপনি কি ডট-ফাইলগুলি আদৌ দেখতে চান? যদি তা না হয় তবে কেবল -a বিকল্পটি ফেলে দিন।
পিটার জি।

29

এলএস মানুষের ব্যবহারের জন্য ডিজাইন করা হয়েছে এবং আপনার ফলাফলটিকে পার্স করা উচিত নয়

শেল স্ক্রিপ্টগুলিতে, কয়েকটি ক্ষেত্রে রয়েছে যেখানে ls এর আউটপুটকে পার্সিং করা পছন্দসই প্রভাব অর্জনের সহজতম উপায় of যেহেতু ls ফাইল-নামগুলিতে অ-এএসসিআইআই এবং নিয়ন্ত্রণ অক্ষরগুলিকে মঙ্গোল করতে পারে, এই কেসগুলি সেগুলির একটি উপসেট যা থেকে কোনও ফাইলের নাম গ্রহণের প্রয়োজন হয় না ls

অজগর, অনুরোধ করার কোন কারণ নেই ls। পাইথনের lsবিল্ট-ইন এর সমস্ত কার্যকারিতা রয়েছে। ব্যবহার করুন os.listdirএকটি ডিরেক্টরির বিষয়বস্তু তালিকা এবং os.statবা osফাইলগুলির মেটাডেটা প্রাপ্ত। osমডিউলগুলির অন্যান্য ক্রিয়াগুলিও আপনার সমস্যার সাথে সম্পর্কিত হতে পারে।


আপনি যদি ssh- র মাধ্যমে দূরবর্তী ফাইলগুলিতে অ্যাক্সেস করে থাকেন তবে ফাইলের নাম তালিকাভুক্ত করার পক্ষে যুক্তিযুক্ত শক্তিশালী উপায়টি এসফটিপি মাধ্যমে:

echo ls -1 | sftp remote-site:dir

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

পাইথনে (সাবধান যে শেল মেটাচার্যাক্টর অবশ্যই এতে পালাতে হবে remote_dir):

command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")

আরও জটিল মিথস্ক্রিয়াগুলির জন্য ডকুমেন্টেশনে sftp এর ব্যাচ মোডটি সন্ধান করুন।

কিছু সিস্টেমে (লিনাক্স, ম্যাক ওএস এক্স, সম্ভবত কিছু অন্যান্য ইউনিস, তবে অবশ্যই উইন্ডোজ নয়), sshfs এর মাধ্যমে ssh এর মাধ্যমে একটি রিমোট ফাইল সিস্টেম মাউন্ট করা এবং তারপরে স্থানীয়ভাবে কাজ করা একটি ভিন্ন পদ্ধতির ।


আমি এসএসএইচ এর মাধ্যমে রিমোট মেশিনের সাথে সংযুক্ত আছি। আমি একটি লাইনে রিমোট মেশিনে os.listdir এর মতো পাইথন ফাংশন সম্পাদন করার কোনও উপায় পাইনি। সুতরাং, এই প্রশ্ন। আমি কেবল ফাইল তালিকাবদ্ধ করার জন্য কোনও স্ক্রিপ্ট লিখতে চাই না। এই সমস্যা কাছাকাছি কোন উপায় আছে?
ফিক্সজেক্সার

@ ফিক্সক্সিক্সার: এসএসএস পরিস্থিতি বদলাবে না, এটি আপনার মূল প্রশ্নে উল্লেখ করা উচিত! আমি মনে করি sftp আপনার ব্যবহারের ক্ষেত্রে উপযুক্ত।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

আমি বিভ্রান্তির জন্য দুঃখিত। "কমান্ড_লাইন" তেও আমি পাসওয়ার্ড সন্নিবেশ করার উপায় আছে কি?
ফিক্সজিক্সার

@ ফিক্সক্সিক্সার: আমি জানি না, ssh এর লেখকরা সরল পাঠ্যে সংরক্ষিত পাসওয়ার্ডগুলিতে নকল করেছেন এবং এটিকে সহজ করে না tend আপনার সত্যিকারের কী-ভিত্তিক প্রমাণীকরণ সেট আপ করা উচিত (ওয়েবে প্রচুর টিউটোরিয়াল এবং এ সম্পর্কে সুপারসার ডটকমের প্রশ্নগুলি রয়েছে )।
গিলস 'অশুভ হওয়া বন্ধ করুন'

11

তুমি ব্যবহার করতে পার ls -1

ls -l কাজটিও করবে


উপরের উত্তরে ইতিমধ্যে আপনি যা বলেছেন ঠিক সেগুলি উল্লেখ করা হয়েছে। এছাড়াও বিশেষত প্রশ্নটি ls -lব্যবহার করা উচিত নয় says
ডিভএক্স

2

সহজ, যতক্ষণ না আপনার ফাইলের নামগুলিতে নতুন লাইন অন্তর্ভুক্ত না থাকে:

find . -maxdepth 1

আপনি যদি এটি অন্য কমান্ডে পাইপ করছেন, আপনার সম্ভবত ফাইল ফাইলের নামগুলি নিউলাইনগুলির চেয়ে নাল বাইট দ্বারা পৃথক করতে পছন্দ করা উচিত, যেহেতু নাল বাইট কোনও ফাইলের নামেই ঘটতে পারে না (তবে নিউলাইনগুলি হতে পারে):

find . -maxdepth 1 -print0

টার্মিনালে প্রিন্ট করা সম্ভবত এক লাইন হিসাবে প্রদর্শিত হবে, কারণ নাল বাইটগুলি সাধারণত মুদ্রিত হয় না। কিছু প্রোগ্রামের নাল-সীমাবদ্ধ ইনপুট হ্যান্ডেল করার জন্য একটি নির্দিষ্ট বিকল্পের প্রয়োজন হতে পারে যেমন sortএর -z। আপনার নিজস্ব স্ক্রিপ্টটিও এর জন্য অ্যাকাউন্ট করতে হবে।

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