পরম পাথ সহ ডিরেক্টরিতে সমস্ত ফাইল তালিকাভুক্ত করা যায়


30

আমার একটি ফাইল প্রয়োজন (সাধারণত একটি তালিকা ফাইল) যা ডিরেক্টরিতে প্রতিটি ফাইলের পরম পথ ধারণ করে path

উদাহরণ dir1: file1.txt file2.txt file3.txt

listOfFiles.list:

/Users/haddad/dir1/file1.txt
/Users/haddad/dir1/file2.txt
/Users/haddad/dir1/file3.txt

আমি লিনাক্স / ম্যাক এ কীভাবে সম্পাদন করতে পারি?

উত্তর:


30
ls -d "$PWD"/* > listOfFiles.list

এই লাল টুপি লিনাক্স কাজ করবে?
আরবিয়ান_আলবার্ট

4
যে কমান্ডটি কোনও লিনাক্স বা ইউনিক্স অপারেটিং সিস্টেমে কাজ করে। আপনি যদি প্রতি লাইনে একটি ফাইল পেতে চান তবে আপনাকে ব্যবহার করতে হবেls -d -1 $PWD/*
মেলবারস্লান

1
যদি আপনার ফাইলের নামগুলি দীর্ঘ হয় বা টার্মিনাল প্রস্থটি সংকীর্ণ হয়, হ্যাঁ, তবে এটিই হবে তবে আপনি পুরো স্ক্রিনটি দখল করতে টার্মিনাল উইন্ডোটি সর্বাধিক করেছেন বা আপনার ফাইলের নামগুলি (পথ সহ) সত্যিই সংক্ষিপ্ত, এটি ধারণ করবে না সত্য। -1বিকল্পটি আপনাকে প্রতি লাইনে একটি ফাইল নাম পাওয়ার গ্যারান্টি দেয়
মেলবারস্লান

7
যদি আউটপুট কোনও টার্মিনাল হয় তবে মেলবার্স্লানের যোগ প্রয়োজন। lsআউটপুট কোনও ফাইল বা টার্মিনালে হয় কিনা তা সনাক্ত করে।
রুনিয়াম

9
ডিরেক্টরিটিতে হাজার হাজার ফাইল উপস্থিত থাকলে এটি ব্যর্থ হবে, অর্থাৎ সর্বাধিক কমান্ড লাইন আকারের চেয়ে বেশি (শেলটি পুরো পথের সাথে ফাইলের নামগুলি প্রসারিত করছে এমনটি আরও বেশি সম্ভব হয়েছে)। অ্যান্ডি ডাল্টনের findউত্তরটি আরও ভাল সমাধান, কারণ এটি কতগুলি ফাইল তালিকাভুক্ত করা হোক না কেন এটি ব্যর্থ হবে না।
কাস

33

আপনি অনুসন্ধান ব্যবহার করতে পারেন। ধরে নিচ্ছেন যে আপনি কেবল নিয়মিত ফাইল চান, আপনি এটি করতে পারেন:

find /path/to/dir -type f > listOfFiles.list

আপনি যদি অন্য ধরণের ফাইল চান তবে আপনি টাইপ প্যারামিটারটিকে যথাযথ হিসাবে সামঞ্জস্য করতে পারেন।


7
আরও ভবিষ্যত-প্রমাণ সমাধান দেখানোর জন্য +1 ls। এটি findউপ-ডিরেক্টরিগুলি পুনরাবৃত্তি করে, অ-পুনরাবৃত্তির জন্য আপনাকে যুক্তির -maxdepth 1আগে যুক্ত করতে হবে -type
কুবানচেক

@AndyDalton কিভাবে ব্যাশ মধ্যে একটি অ্যারের একই পেতে
Kasun Siyambalapitiya

13

এতে নোট করুন:

ls -d "$PWD"/* > listOfFiles.list

এটি শেল যা ডিরেক্টরিতে (অ-লুকানো) ফাইলগুলির তালিকা গণনা করে এবং তালিকাটি পাস করে lslsকেবলমাত্র সেই তালিকাটি এখানে প্রিন্ট করে, তাই আপনিও করতে পারেন:

printf '%s\n' "$PWD"/*

3
ব্যবহারে printfঅতিরিক্ত বোনাস রয়েছে যা আপনার যদি হাজার হাজার ফাইল printfপৃথক প্রক্রিয়া হিসাবে চালিত না হয় তবে আপনি 'কমান্ড লাইন খুব দীর্ঘ' ত্রুটি পাবেন না।
এড্রিয়ান প্রানক

2
@ অ্যাড্রিয়ানপ্রঙ্ক, হ্যাঁ, শেল ছাড়া যেখানে printfঅন্তর্নির্মিত মতো নয় pdkshএবং এর কিছু ডেরাইভেটিভ বা বোর্ন শেলের বেশিরভাগ সংস্করণ রয়েছে। তুলনায় এক অপূর্ণতা ls -dআছে যদি সেখানে কোনো নন-গোপন ফাইল, এটি মুদ্রণ হবে /path/to/*যখন lsআপনার সম্পর্কে বিদ্যমান পরিবর্তে না যে ফাইল একটি ত্রুটি দেব।
স্টাফেন চেজেলাস

10

কেবল নিয়মিত ফাইলগুলি দেখতে -

find "$PWD" -type f  > output

3

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

ls | xargs realpath
  • xargs স্ট্যান্ডার্ড ইনপুট থেকে কমান্ড লাইনগুলি তৈরি এবং সম্পাদন করে।
  • realpath: ক্যানোনিকালাইজড পরম পথের নামটি ফিরিয়ে দিন
  • readlink: একটি প্রতীকী লিঙ্কের পড়ার মান

রিয়েলপথ: কমান্ডটি খুঁজে পাওয়া যায়নি
রজারডপ্যাক

@rogerdpack আপনার কি coreutils প্যাকেজটি ইনস্টল? আমি সঙ্গে তথ্য পেতে dpkg -S /usr/bin/realpath। পরীক্ষা করে দেখুন এই
পাবলো এ

3

সঙ্গে আরেকটি উপায় tree: এখানে যাও recursively উল্লেখ না, এটা যায় এবং অসদৃশ সন্ধান করতে বা ম যদি আপনি কোন ভুল থাকে না (মত Permission denied, Not a directoryআপনার কাছে ক্ষেত্রে সুনির্দিষ্ট পাথ পেতে আপনাকে ফাইল ভোজন চান) xargsবা অন্যান্য কমান্ড

tree -fai /pathYouWantToList >listOfFiles.list

বিকল্পগুলির অর্থ:

-a     All  files  are  printed.  By default tree does not print hidden files (those beginning with a dot
       `.').  In no event does tree print the file system constructs `.'  (current  directory)  and  `..'
       (previous directory).

-i     Makes tree not print the indentation lines, useful when used in conjunction with the -f option.

-f     Prints the full path prefix for each file.

ইনস্টল করতে tree:

sudo apt install tree উবুন্টু / ডেবিয়ান উপর

sudo yum install tree CentOS / ফেডোরায়

sudo zypper install tree ওপেনসুসে


1
ট্রি: কমান্ডটি পাওয়া যায় নি
রজারডপ্যাক

@rogerdpack sudo apt install treeউবুন্টু উপর sudo yum install treeসেন্টওএস উপর sudo zypper install treeopenSUSE উপর
এডুয়ার্ড Florinescu

1
brew install treeম্যাকে
ওআরিক

2

অতীত লিনাক্স পরিবেশে, আমার একটি resolveকমান্ড ছিল যা পাথগুলিকে মানিক করে তুলবে, যার সাথে একটি আপেক্ষিক পথকে পরম পথে রূপান্তর করা হত। আমি এখন এটি খুঁজে পাচ্ছি না, তাই এটি সম্ভবত এই সংস্থার কেউ লিখেছিলেন।

পাইথন বা পার্ল স্ট্যান্ডার্ড লাইব্রেরিতে (এবং সম্ভবত অন্যান্য ভাষাও) ব্যবহার করে আপনি নিজের স্ক্রিপ্ট তৈরি করতে পারেন।

resolve.py :

#!/bin/env python

import sys
import os.path

for path in sys.argv:
    print os.path.abspath(path)

resolve.pl :

#!/bin/env perl

use warnings;
use Cwd qw ( abs_path );

foreach (@ARGV) {
    print abs_path($_), "\n";
}

তারপরে, আপনি আপনার সমস্যার সমাধান করবেন:

resolve.py * > listOfFiles.list

এই আদেশের সাহায্যে আপনি এ জাতীয় জিনিসগুলিও করতে পারেন:

cd /root/dir1/dir2/dir3
resolve.py ../../dir4/foo.txt
# prints /root/dir1/dir4/foo.txt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.