আমি কোনও ডিরেক্টরিতে নাম না লিখে কীভাবে সিডি করব?


8

কখনও কখনও ফোল্ডারের নাম সহ কোনও ডিরেক্টরি অ্যাক্সেস করতে বিরক্ত হয়। বলুন আমার নামের একটি ডিরেক্টরি আছে a b c d। ব্যবহার বাদে Tabডিরেক্টরিটির নাম টাইপ না করে ফোল্ডারটি অ্যাক্সেস করার কোনও উপায় আছে কি?

আমি জানি যে লিনাক্সের প্রতিটি নির্দিষ্ট ফাইলের একটি অনন্য শনাক্তকারী থাকে। ফোল্ডারটি অ্যাক্সেস করতে আমি কি এটি ব্যবহার করতে পারি? আমি জানি না এটি আসলে করা যেতে পারে বা এটি কীভাবে করা যায়।

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

একটি প্রক্রিয়া মত এটি চিন্তা করার চেষ্টা করুন। আপনি যদি psকোনও টার্মিনালে কমান্ডটি চালিত করেন তবে এটি প্রতিটি প্রক্রিয়ার নাম এবং সংখ্যা সহ একটি প্রক্রিয়া তালিকা আউটপুট করে দেয়। প্রক্রিয়া নম্বর সহ আপনাকে সেই প্রক্রিয়াটি কল করতে হবে। একইভাবে, ডিরেক্টরিতে কোনও নাম্বার রয়েছে যাতে আপনি নামটির সাথে ডাকার পরিবর্তে ডিরেক্টরিটির নাম্বার দিয়ে কল করতে পারেন?


আরও তদন্তে, আমি খুঁজে পেয়েছি যে প্রতিটি ডিরেক্টরি একটি অনন্য আছে inode। তবে, এর দ্বারা কোনও ডিরেক্টরি অ্যাক্সেস করার জন্য আমি এখনও পর্যন্ত কোনও অন্তর্নির্মিত কমান্ড খুঁজে পাইনি inode


1
ওয়াইল্ডকার্ডগুলিও কাজ করে। অন্যথায় এর zshপরিবর্তে ইনস্টল করুনbash
রিনজউইন্ড

ঠিক আছে ওয়াইল্ডকার্ডস আমি যে উত্তরটি খুঁজছি তা নয়। zsh সম্পর্কে ভাবতে হবে
মারুফ

আপনার মতো একটি ডিরেক্টরি অ্যাক্সেস করতে হবে বা একাধিক আছে?
সের্গেই কোলোডিয়াজনি

আপনার প্রশ্নের সাথে যুক্ত করার পরিবর্তে উত্তর হিসাবে আপনার সমাধানটি (যা উপায় দ্বারা আকর্ষণীয় হতে পারে) যুক্ত করুন। এর জন্য উত্তরগুলি তৈরি করা হয়!
কোস

সেই প্রোগ্রামটিকে কেবল পথটি মুদ্রণ করুন এবং একটি করুন cd $(icd XXXX)--- আপনি কেবল সেই findঅংশটি আবার লিখেছেন । এখন আপনার পরবর্তী কাজটি ... আরও কার্যকর কী, আপনার প্রোগ্রাম বা :- findপি পরীক্ষা করুন what's
রোমানো

উত্তর:


2

ওপি দ্বারা সমাধান সমাধান

এখানে কোনও অন্তর্নির্মিত কমান্ড পাওয়া যায় নি। তবে শেষ পর্যন্ত আমি সিডি ব্যবহার করতে একটি সি প্রোগ্রাম লিখতে সক্ষম হয়েছি (আমার প্রোগ্রাম আইসিডি == (ইনড সিডি)) ইনড মানটি ব্যবহার করে কোনও ফোল্ডারে প্রবেশ করতে। এখানে আমি কাঁচা কোড পোস্ট করছি।

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

RAW কোডটি এখানে ভাগ করা হয়েছে,

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include<dirent.h>
#include <unistd.h>
#include <grp.h>
#include<pwd.h>

using namespace std ;

int main(int argc , char *argv[] ) {

  struct stat ITR ;

  if( argc != 2 ) {
    printf("\nWrong Command\n\n") ;
    return 1 ;
  }

  long long given_inode = 0 ;
  for( int i =0 ; argv[1][i] ; i++ ){
    given_inode *= 10 ;
    given_inode += (argv[1][i]-'0') ;
  }

//  if (stat(argv[1], &ITR) == -1) {
//    perror("stat");
//    return 1  ;
//  }

  printf("%s\n",argv[0]) ;
    char PWD[1000] ; 
    getcwd( PWD , 1000 ) ;

  DIR *d;
  struct dirent *p;
  char path[100000] ;
  d = opendir(".");
  if( d != NULL ) {
    while( (p = readdir(d))!= NULL ) {
        strcpy( path , "./" ) ;
        strcat( path, p->d_name ) ;
        stat(path, &ITR) ;
        //printf("%s --> ",path) ;
        //printf("%ld\n",ITR.st_ino) ;
        if( ITR.st_ino == given_inode ) {
          strcpy( path , "gnome-terminal --working-directory=" ) ;
          strcat( path, PWD ) ;
                    strcat( path, "/" ) ;
                    strcat( path, p->d_name ) ;
                    system(path) ; 
                    //printf("%s\n",path) ;
                    return 0 ;
        }
    }
  }
  printf("icd %lld:No such file or directory\n",given_inode) ;
  return 0 ;

}

আমি এখানে জিনোম টার্মিনাল ব্যবহার করছি। স্পষ্টতই অন্যান্য ডিস্ট্রোর জন্য কোড পরিবর্তন করা হবে।


1
আপনি যদি শেল স্ক্রিপ্টের মধ্যে একটি ডিরেক্টরিতে যেতে পারেন, আপনি যা চান তা সম্পাদন করতে আপনি স্ক্রিপ্টটি উত্স করতে পারেন। কমান্ডটি সংক্ষিপ্ত করার জন্য একটি উপনাম সংজ্ঞায়িত করুন।
daltonfury42

19

লিনাক্সের (সর্বাধিক) ফাইল সিস্টেমে যে কোনও সত্তার একটি অনন্য সনাক্তকারী থাকে inode। লক্ষ্য করুন যে কোনও ফাইলের একাধিক নাম থাকতে পারে ( হার্ডলিঙ্ক ), তবে আমার জানা সমস্ত ফাইল সিস্টেমে ডিরেক্টরিগুলির কেবল একটি লিঙ্ক রয়েছে। নোডের ধারণাটি ফাইল সিস্টেমের স্থানীয় , যাতে দুটি পৃথক ডিভাইসে (পার্টিশন বা যাই হোক না কেন) স্বতন্ত্রতার গ্যারান্টি নেই Notice

আপনি আপনার ডিরেক্টরিটির ইনোডটি এতে দেখতে পারেন ls -ldi:

[:~] % ls -ldi tmp/uffa                     
20873234 drwxrwxr-x 2 romano romano 4096 Jun 26  2014 tmp/uffa

সুতরাং আপনি জানেন যে আপনার ডিরেক্টরিতে 20873234 টি ইনড হয়েছে Now এখন আপনি কমান্ডটি দিয়ে এটিতে স্যুইচ করতে পারেন:

[:~] % cd "$(find ~ -inum 20873234 2> /dev/null)"  
[:~/tmp/uffa] %

(দ্রষ্টব্য যে 2> /dev/nullপথটি অপঠনযোগ্য ডিরেক্টরি সম্পর্কে ত্রুটি বার্তাগুলি বন্ধ করে দেওয়া হবে))

এই আদেশটি আপনার হোম ডিরেক্টরিটির পুরো স্ক্যান করবে, তাই ধৈর্য ধরুন। 1

তবে cdআপনার শেলটি ব্যবহার এবং টিএবি-সমাপ্তির বিষয়ে কী?


১. এটি অবশ্যই আমার সবচেয়েপোস্ট করা 2 টি অদক্ষ জিনিসহতে হবে... এনট্রপি করার একটি ওড। কারণটি হ'ল যে "প্রাথমিক কী" যার অধীনে কোনও ফাইল বা ডিরেক্টরিতে অ্যাক্সেস অনুকূলিত করা হয়, দ্রুত এবং সরাসরি - অনুমান কী? - পথনাম:/dir/dir/file_or_dir। তদতিরিক্ত, আপনাকে প্রদত্ত ডিরেক্টরিতে অ্যাক্সেস দেওয়ার জন্য, সিস্টেমটিকে পাথের সমস্ত অনুমতি পরীক্ষা করা দরকার ... সুতরাং আবার, ইনোডের মাধ্যমে অ্যাক্সেস করার অর্থ ফাইল সিস্টেমটি পুনরাবৃত্তভাবে স্ক্যান করা।

২. ভাল, আপনি স্ক্যান করে জিনিসটিকে আরও খারাপ করতে পারেন/3

৩. তবে তার পরে এটি কাজ করবে না, কারণ ইনোডগুলি কেবলমাত্র প্রতি ফাইল-সিস্টেমের (প্রতি মাউন্ট) ভিত্তিতে অনন্য।


ধন্যবাদ @ রোমানো আসলে আমি সমস্যাটি নিয়ে ভাবছিলাম। আমি জানি না যে সমস্যাটি এমন অদক্ষ সমাধানে পরিণত হবে। তবে সমাধান সম্পর্কে চিন্তা করুন। আপনি সহজেই এসি প্রোগ্রাম লিখতে পারেন এবং এটিকে / বিনে লাগাতে পারেন এবং তারপরে এটি কেবলমাত্র ইনোড নম্বর দিয়ে চালানোর চেষ্টা করতে পারেন। আমি যদি এমন চিন্তাভাবনা লিখতে সক্ষম হই তবে কোডটি পোস্ট করব।
মারুফ

1
এবং একটিও আমার জানা দরকার বলে মনে করে। আমি এই আদেশের প্রথম অংশটি বুঝতে পারি। "$ (~ -inum 20873234 ****** সন্ধান করুন)"। আপনি কেন এটি লিখছেন তা আমি জানি না, "2> / dev / নাল"। আপনি কি আবার একবার স্পষ্ট করতে পারেন?
মারুফ

4
@ মারুফ, দক্ষতা অনুসারে এটি কার্যকর হবে না। "প্রাথমিক কী" যার অধীনে একটি ফাইল বা ডিরেক্টরির এক্সেস অপ্টিমাইজ করা হয়, দ্রুত এবং সরাসরি, কি অনুমান, পথনাম ... হয় /dir/dir/file_or_dir। আপনার সি প্রোগ্রামটির জন্য ফাইল সিস্টেমটিও স্ক্যান করা দরকার, এবং findগত 40 বছর ধরে এটি অনুকূলিত হয়েছে ... এখনও --- কেন? আপনার যদি একটি শর্টকাট প্রয়োজন হয়, a="/my/really/strange and long/dir path name/"এবং তারপর ব্যবহার করুন cd "$a"। মারতে পারছিনা। অথবা সিমলিংক ব্যবহার করুন।
রুমো

1
ভাল একটি +1। আমি অনুরূপ কিছু লেখার প্রান্তে ছিলাম, তবে আমি খুব অলস ছিলাম, কারণ কার্যটির কোনও ধারণা নেই। @ রুমানো
পাইলট

3
@ রুমানো আমি যুক্ত করব যে সাধারণভাবে, এমনকি একটি একক ফাইল সিস্টেমেও এমন অনেকগুলি ফাইল থাকতে পারে যা একই ইনোড, অর্থাৎ হার্ডলিঙ্কগুলি ধারণ করে। যেহেতু আমরা এখানে ডিরেক্টরিগুলি সম্পর্কে কথা বলছি, এটি সত্য বলে মনে হয় যে প্রতিটি ডিরেক্টরিতে একটি অনন্য ইনোড থাকে (ডিরেক্টরিগুলি হার্ডলিঙ্ক করা যায় না Also) এছাড়াও, আমি মনে করি যে এটির ইনোডের মাধ্যমে কেউ সরাসরি কোনও ফাইল অ্যাক্সেস করতে না পারার কারণটি হ'ল এটি কোনও ডিরেক্টরিকে বাইপাস করবে think ট্র্যাভারসাল, কোনও ব্যবহারকারীকে সংশ্লিষ্ট সংস্থান অ্যাক্সেসের অনুমতি দেওয়া আছে কিনা তা নির্ধারণের জন্য প্রয়োজনীয়। (সুতরাং যদি কোনও ডিরেক্টরি যদি তার ইনোড দ্বারা অ্যাক্সেস করতে পারে তবে কার্নেলটিকে যে কোনও উপায়ে তার পথ নির্ধারণ করতে হবে))
মাল্টে স্কোরাপ্পা

8

আপনি Tabফোল্ডারগুলি তালিকাভুক্ত না করে পরিবর্তিত করে তুলতে পারেন । ফাইলটি সম্পাদনা করুন ~/.inputrcএবং যুক্ত করুন

"\C-i": menu-complete
"\e[Z": "\e-1\C-i"

আপনি যদি এটি সমস্ত ব্যবহারকারীর জন্য চান তবে /etc/inputrcপরিবর্তে সম্পাদনা করুন।

এটি কার্যকর করতে Ctrl+ xএবং Ctrl+ টিপুন r

এখন cdTabআপনার ফোল্ডারের নাম না লিখে নেভিগেট করতে ব্যবহার করুন । cdShift+ Tabঅন্য দিকে ঘোরবে।

মনে রাখার মতো মূল্য যা cd -আপনাকে সর্বশেষ পরিদর্শন করা ফোল্ডারে নিয়ে যাবে।


এটি একটি ভাল উত্তর। আপনি কি একবার এটি প্রদর্শন করতে পারেন এবং তারপরে ঘোরান?
ডাল্টনফুরি 42

1
আপনি এটি অন্য শর্টকাটে বরাদ্দ করতে পারেন। আমি Eclipse ব্যবহার করি এবং আমি স্বয়ংক্রিয় সম্পূর্ণর জন্য Ctrl + স্পেসে অভ্যস্ত তাই আমি "\ C-" ব্যবহার করব: পরিবর্তে মেনু-সম্পূর্ণ, ট্যাবটি যেমন রয়েছে তেমন রেখেছি।
কাটু

5

আপনি শেল ওয়াইল্ডকার্ড ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, আমি করতে পারেন

cd a?b?c?d

অথবা

cd a\*b\*c\*d

এবং এটি ওয়াইল্ডকার্ডগুলি প্রকৃত নামে প্রসারিত করবে এবং সেই ডিরেক্টরিতে পরিবর্তিত হবে। ধরে নিচ্ছি যে এটিই একমাত্র ডিরেক্টরি যা মেলে।

আপনি উভয় থাকে a b c dএবং a1b2c3dতারপর, cd a?b?c?dহয় প্রসারিত হবে cd a1b2c3d a b c dবা cd a b c d a1b2c3d(প্রকৃত অর্ডার কার্নেল, ফাইলসিস্টেম ... উপর নির্ভর করবে), এবং ব্যাশ চুপটি প্রথম পথে আপনি সরে যাবে।

অন্যদিকে, আপনার প্রায়শই তেমন একটি নামযুক্ত ফোল্ডার থাকে না, সুতরাং a*dমধ্যবর্তী সমস্ত অক্ষর না লিখেই এর মতো কিছু প্রসারিত করার পক্ষে যথেষ্ট। এটি বিশেষত কার্যকর যখন আপনি এটি টাইপ করতে সক্ষম না হন (উদাঃ নামগুলি ভিন্ন স্ক্রিপ্টে বা এমনকি একটি পৃথক এনকোডিং রয়েছে) এবং অন্যথায় আপনার ফাইলের নামটি অষ্টাল-এনকোড করার দরকার পড়ে।


3

আপনি এই ডিরেক্টরিটি কোনও ফাইল ম্যানেজারে খুঁজে পেতে পারেন, যেমন নটিলাস এবং কেবল টানুন এবং টার্মিনালে ফেলে দিন।

আপনি যদি আগে cdটার্মিনাল টাইপ করেন তবে আপনি কমান্ডটি পাবেন।


আসলে আমি টার্মিনাল থেকে সবকিছু করার চেষ্টা করছি। :)। সুতরাং নটিলাস সম্পর্কে ভাবার দরকার নেই। আমি মনে করি ফাইলটি অ্যাক্সেস করার জন্য অবশ্যই একটি পদ্ধতি থাকতে হবে। লিনাক্স হিসাবে সর্বদা একটি নির্দিষ্ট ফাইলের জন্য একটি অনন্য সনাক্তকারী সংরক্ষণ করুন। তবে আমি জানি না কীভাবে এটি করা যায় বা এটি আসলে কী করা যায়।
মারুফ

আপনি যা জিজ্ঞাসা করছেন তা অস্পষ্ট। ডিরেক্টরিটি কোনওভাবে নাম না প্রবেশ করে কোনও ডিরেক্টরিতে পরিবর্তন করা সম্ভব নয়।
পাইলট

বিবৃতি দেখুন। আমি এটি আপডেট করেছি।
মারুফ

অথবা যদি কোনও একক ফাইলের ক্ষেত্রে সমস্যা হয় তবে আপনি একটি উপনাম যুক্ত করতে পারেন।
ডাল্টনফুরি 42

1

আপনার অনুরোধটি ঠিক কী তা নিশ্চিত কিনা তা নিশ্চিত নন zshতবে ডিরেক্টরিটির কড়া নাম টাইপ করার পরিবর্তে অন্য কোনও উপায়ে ডিরেক্টরি অ্যাক্সেস করার জন্য কিছু ঝরঝরে কৌশল রয়েছে; একটির জন্য, আপনি নামের একটি অংশ টাইপ করতে পারেন এবং এটি ডিরেক্টরিটির পুরো নাম পর্যন্ত প্রসারিত হবে, যা খুব দরকারী জিনিসগুলির জন্য মঞ্জুরি দেয়, উদাহরণস্বরূপ:

এখানে চিত্র বর্ণনা লিখুন

মারছে TAB...

এখানে চিত্র বর্ণনা লিখুন


1

সবচেয়ে সহজ উপায় হ'ল ডিরেক্টরি নামের উপর ডাবল ক্লিক করা (এটি স্ক্রিনে দৃশ্যমান বলে ধরে নেওয়া), তারপরে স্পেস অনুসারে সিডি টাইপ করুন এবং আপনার মাউসের চাকা বোতামটি ক্লিক করুন এবং এটি যে ডিরেক্টরিটি আপনি হাইলাইট করেছেন তা অনুলিপি করে পেস্ট করবে। এন্টার কী টিপুন তারপরে প্রয়োজনীয় ডিরেক্টরিতে পরিবর্তন হবে।

আমি এই প্রক্রিয়াটি সর্বদা ব্যবহার করি এবং এটি কেবল ডিরেক্টরি নামের মধ্যে সীমাবদ্ধ নয়। এটি কমান্ড লাইন ব্যবহার করে যে কোনও কমান্ডের জন্য ব্যবহার করা যেতে পারে।

শুভকামনা।


এটি বিশেষ অক্ষরগুলি এড়াতে পারবে না
Scz

1

এটি যদি কেবল একটি বা কয়েকটি ডিরেক্টরি হয় তবে আপনার বাশারসিআর বা যে কোনও ডিআইডি ফাইলের উপকরণ নেই কেন? উদাহরণ স্বরূপ:

alias abc='cd /tmp/"a b c"'

তারপরে আপনি যখনই সেখানে যেতে চান, কেবল টাইপ করুন abc


0

আপনার সমস্ত ওএস ডিরেক্টরিতে হ্যাশ টেবিল তৈরি করতে আপনি একটি প্রোগ্রাম লিখতে পারেন। এটি মূলত একটি ট্রি সমতলকরণ প্রোগ্রাম হবে।

তবে তারপরে আপনি এর মতো কিছু করতে পারতেন hash-cd 32okjv02এবং এটি 32okjv02ডিরেক্টরি ম্যাপিংয়ের জন্য হ্যাশ টেবিল লকআপ করবে। এবং আপনার ডিরেক্টরিতে লাফ দিন। আপনার সমস্ত ডিরেক্টরি সূচিকৃত হয়ে উঠলে এটি সত্যিই দ্রুত হবে।

এই প্রোগ্রামটি প্রতি নতুন ডিরেক্টরিতে কল করতে আপনাকে এমকেডির ওরফে করতে হবে এবং সম্ভবত একটি হ্যাশ-টেবিল চেক / রিফ্রেশ কমান্ড লিখতে হবে যা আপনি প্রতি মিনিটে এবং লগনে ক্রোন করতে পারেন।

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