একাধিক ডিরেক্টরি স্তরের উপরে যেতে সিডি ব্যবহার করে


39

আমি জাভা প্রকল্পগুলি নিয়ে কাজ করছি যা প্রায়শই গভীরভাবে নেস্টেড ফোল্ডারগুলির ফলস্বরূপ হয় (/ পাথ / টু / প্রজেক্ট / কম / জাভা / ল্যাং / যাই হোক না কেন ইত্যাদি) এবং কখনও কখনও 4 টি ডিরেক্টরি স্তর উপরের দিকে লাফিয়ে যেতে সক্ষম হতে চায়। টাইপ করা সিডি ../../../ .. একটি ব্যথা এবং আমি সিএমলিংক করতে চাই না। সিডিতে এমন কিছু পতাকা রয়েছে যা আপনাকে একাধিক ডিরেক্টরি স্তরকে উপরে উঠতে দেয় (আমার মাথার মধ্যে এটি সিডি -4 এর মতো কিছু হবে)? দুর্ভাগ্যক্রমে আমি সিডির জন্য কোনও ম্যান পেজ বিশেষভাবে খুঁজে পাচ্ছি না, পরিবর্তে কেবল অকেজো "বিল্টিনস" পৃষ্ঠা পাচ্ছি।


1
cd ...কোথায় 'এর সংখ্যা' তা বোঝাতে ব্যাশ সংশোধন করা হচ্ছে। উপরে উঠার স্তরের সংখ্যা হবে। এটি কি এমন দ্বন্দ্বের কারণ হতে পারে যা আমি অবগত নই?

এখানে ম্যাকওএসের জন্য যারা আসছেন তাদের জন্য আপনি ইনস্টল করতে পারেন zshএবং এটির Oh My Zshএকটি আরও ভাল বিকল্প bashএবং তারপরে আপনি ঠিক cd ...এমনভাবে করতে পারেন (একাধিক বিন্দু)
ডমিনিক

উত্তর:


29

বা ... এটি চেষ্টা করুন: (ইয়ে গুগল)

..N ব্যবহার করে ডিরেক্টরিটি নেভিগেট করুন:

নীচের উদাহরণে, ..4 4 ডিরেক্টরি স্তর, ..3 3 ডিরেক্টরি স্তর উপরে যেতে, ..2 2 ডিরেক্টরি স্তর উপরে যেতে ব্যবহৃত হয়।

.বাশ_ প্রোফাইলে নিম্নলিখিত নামটি যুক্ত করুন এবং পুনরায় লগইন করুন।

ওরফে .. = "সিডি .."

ওরফে ..2 = "সিডি ../ .."

ওরফে ..3 = "সিডি ../../ .."

(ইত্যাদি)

দেখুন হ্যাক # 2


10
আমি বরং alias লেখা ব্যবহার করেন .., ...এবং ....দ্রুত টাইপ করতে হিসাবে তারা কিন্তু alias লেখা নীতিকে অবশ্যই একই।
বার্নহার্ড

1
@ বার্নহার্ড আপনার স্বাগতের চেয়ে আরও বেশি, কারণ আমি বিশ্বাস করি না যে এটি কোনও দ্বন্দ্ব সৃষ্টি করবে। আমি কেবল এটি হিসাবে রেখেছি কারণ আমি ওয়েবসাইট থেকে এটি উদ্ধৃত করেছি।
কাটরাইটজম

ডসের জন্য 4DOS.EXE শেলটিও সমর্থন করে cd ..., cd ....ইত্যাদি hand এটি খুব সহজ ছিল।
অ্যালেক্সিয়াস

........ এর চেয়ে দ্রুত নয়, প্রকৃতপক্ষে এটি 2 টি অক্ষর ধীর ..
রায়ান

29

একটি সাধারন ক্রিয়াকলাপ, যার একটি নামও রয়েছে:

function cd_up() {
  cd $(printf "%0.s../" $(seq 1 $1 ));
}
alias 'cd..'='cd_up'

(আপনি ~/.bashrcপ্রতিটি ক্ষেত্রে এটি চাইলে এটি এটিকে সংজ্ঞায়িত করতে পারেন)।

এটি ব্যবহার করা সহজ:

$ cd.. 10

সুন্দর! আমার জন্য কাজ কর! 4.3.11 বাশ
কার্লোস নুনেজ

2
ভাল উত্তর; আপনি খুঁজে বাতলান যে এই সমাধান চেয়ে ভাল যেমন হয় চাইতে পারেন eval $(printf "cd ..;%.s" $(seq $1))যা cdকারণ, একাধিক বার ~-ওরফে $OLDPWDবরং কোন মধ্যবর্তী নির্দেশিকাতে চেয়ে আগে আবাহন থেকে কাজ ডিরেক্টরি সেট করা হয়। পিএস - cd $(printf %.s../ $(seq "$1"))আপনি চাইলে এটি সরল করে ।
টবি স্পিড

10

একটি সাধারণ, নিম্ন প্রযুক্তির সমাধান যা কোনও সেটআপের প্রয়োজন নেই। bashযদিও কেবল- স্টাইল কমান্ড সম্পাদনা সহ শেলগুলিতে কাজ করে ।

  • আদর্শ cd ..
  • Up-arrow Returnযতবার প্রয়োজন ততবার চাপুন । খুব দ্রুত যদি আপনি দুটি আঙ্গুল ব্যবহার করেন।

2
হা হা, আমার খারাপ ধারণা নয় :)
জোশমোড

8

সঠিক উত্তরটি দেখাবে 'সিডি + এন', যেখানে এন আপনি যে স্তরের উপরে যেতে চান তার সংখ্যা। খুব খারাপ এটি কোথাও নথিভুক্ত নয়!


17
কমপক্ষে এটি ব্যাশে কাজ করে না।
হংকবোঝু

5
দেবিয়ানের সাথে প্রেরণে 4.2.25 বাশ এ কাজ করে না। কৌতূহলের বাইরে আপনি কোন * নিক্স এবং / অথবা শেল ব্যবহার করছেন?
অ্যালেক্সিয়াস

বাশের একটি অন্তর্নির্মিত কল রয়েছে dirsযা [+ n] কে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং এর মাধ্যমে যুক্ত হওয়া নবম অনন্য ডিরেক্টরিটি মুদ্রণ করে pushd। যদি আপনি alias cdতা করেন pushdতবে আপনি এটি ব্যবহার করতে পারেন। তবে নোট করুন যে এটি টেকনিক্যালি অপের প্রশ্নের উত্তর নয়, কারণ এটি অনন্য ডিরেক্টরিগুলির সাথে করতে হবে , এর অর্থ হ'ল ক্রমটি সময়ের সাথে তালগোল পাকিয়ে যায়, আপনি একই ডিরেক্টরিতে ফিরে আসার সাথে সাথে।
ব্রায়ান পিটারসন

হ্যাঁ, pushdএবং popdএকটি [+ n] বিকল্পও গ্রহণ করুন, যার কারণে এটি কাজ করতে সক্ষম। এছাড়াও, যদিও এটি অপূর্ণ এবং অপ্রত্যক্ষ, তবুও আমি অনুমান করি যে এটি প্রশ্নের উত্তর হিসাবে ব্যবহার করা যেতে পারে। প্রায়শই আপনি সম্প্রতি আপনার উপরের ডিরেক্টরিগুলি দেখেছিলেন, তাই তারা ডিরেক্টরি স্ট্যাকের দ্বারা সঞ্চিত সর্বশেষ 10 টি ডায়ারে থাকবে।
ব্রায়ান পিটারসন

আমার জন্য কাজ করে নি ...
ভাস

4

আপনি একটি ফাংশন লিখতে পারেন (এটি একটি ফাংশন হতে হবে, আপনি নিজের শেলের অবস্থা যেমন কার্যক্ষম ডিরেক্টরি পরিবর্তন করতে চান; বহিরাগত কমান্ড কেবল তার নিজস্ব প্রক্রিয়াটিকে প্রভাবিত করবে)।

এখানে একটি ফাংশন যা শারীরিক ডিরেক্টরি কাঠামোয় (যেমন cd -P .., এন টাইমস) আর্গুমেন্ট (ডিফল্ট 1) হিসাবে পাস করা কয়েকটি স্তরের উপরে যাবে :

up() {
    # default parameter to 1 if non provided
    declare -i d=${@:-1}
    # ensure given parameter is non-negative. Print error and return if it is
    (( $d < 0 )) && (>&2 echo "up: Error: negative value provided") && return 1;
    # remove last d directories from pwd, append "/" in case result is empty
    cd "$(pwd | sed -E 's;(/[^/]*){0,'$d'}$;;')/";
}

এটি এর মতো ব্যবহার করুন:

up 4

1
এই কোডটি প্রশ্নের উত্তর দিতে পারে, কেন এবং / অথবা এই কোডটির প্রশ্নের উত্তর কীভাবে তার দীর্ঘমেয়াদী মানকে উন্নত করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করে।
ডোনাল্ড ডাক

1
সম্মত, সাহায্যের জন্য আমি কয়েকটি মন্তব্য যুক্ত করেছি।
মিগল্ড

নিটপিকি হতে, up 4আসলেই কি cd /some/dir/ধরে নেওয়া সমান নয় $PWD = "/some/dir/that/is/deeply/nested/"?
স্ন্যাপফ্র্যাক্টলপপ

2

আপনি যা চেয়েছিলেন ঠিক তা নয় তবে আপনার খোঁজ করা উচিত pushdএবং popd। আমি এগুলিকে কিছু cd...উপনামের চেয়ে ফোল্ডার নেভিগেশনের জন্য অনেক বেশি দরকারী বলে মনে করি

আপনি যদি দু'টি স্থির জায়গা থেকে পিছনে পিছনে যাচ্ছেন তবে স্বাভাবিক জিনিসটির নাম হ'ল।

alias proj1='cd /some/dir/containing/proj1'
alias proj2='cd /some/deeper/dir/structure/containing/proj2'

1

এলিয়াস ব্যবহার না করে আপনি নিম্নলিখিত ব্যাশ ফাংশনটি ব্যবহার করতে পারেন:

function mcd() {
  up=""

  for ((i=1; i<=$1;i++)); do
    up="${up}../"
  done

  cd $up
}

(বা ওয়ান-লাইনার হিসাবে function mcd() { up=""; for ((i=1; i<=$1;i++)); do up="${up}../"; done; cd $up; }:)

এটিকে আপনার ~/.bashrcফাইলে যুক্ত করা এটি আপনার টার্মিনালে উপলব্ধ হবে এবং ../../../../../../কল করার আগে একটি স্ট্রিং cdতৈরি করা cd -শুরু করার ডিরেক্টরিতে ফিরে যাওয়ার পক্ষে এটিও সম্ভব করবে ।

আরও কার্যকর প্রয়োগে কিছু ব্যবহারকারীর ইনপুট চেক থাকতে পারে:

function mcd() {
    if [[ $1 -lt 1 ]]; then
        echo "Only positive integer values larger than 1 are allowed!" >&2
        echo -e "\n\tUsage:\n\t======\n\n\t\t# to go up 10 levels in your directory\n\t\tmcd 10\n\n\t\t# to go up just 2 levels\n\t\tmcd 2\n" >&2
        return 1;
    fi  

    up=""

    for ((i=1; i<=$1;i++)); do
        up="${up}../"
    done

    cd $up
}

0

আপনি অটোজাম্প সম্পর্কে জানেন ? এটি তৃতীয় পক্ষের হ্যাক, তবে এটি আপনার দৃশ্যে কার্যকর হতে পারে।


0

খুব কম ব্যবহৃত পরিবেশের প্যারামিটার ব্যবহার করে দেখুন CDPATH। তারপরে আপনাকে স্পষ্টভাবে স্তর নির্ধারণ করতে হবে না।

উদাহরণ:

$ find workspace -type d
workspace
workspace/project1
workspace/project1/com
workspace/project1/com/java
workspace/project1/com/java/lang

$ CDPATH=".:~/workspace:~/workspace/project1:~/workspace/project1/com:~/workspace/project1/com/java:~/workspace/project1/com/java/lang"
$ cd com
$ pwd
~/workspace/project1/com

যদি একাধিক প্রকল্পে কাজ করা হয় তবে আপনি CDPATH সেটিংসকে একটি প্রকল্প নির্দিষ্ট পরিবেশের ফাইল হিসাবে তৈরি করতে পারেন। এবং অতিরিক্ত অটোমেশনের জন্য শিমের সাথে এটিকে ট্রিগার করুন।

আমি প্রচুর পরিমাণে ধাক্কা এবং পপড ব্যবহার করি। আমি কোনও প্রকল্পে সাবডিয়ারদের চেয়ে প্রকল্প গাছের মাঝে হাপ দেওয়ার জন্য সিডিপ্যাট ব্যবহার করি - তবে এই মুহূর্তে আমি কয়েকটি বড় প্রকল্প নয়, অনেকগুলি ছোট প্রকল্পে কাজ করছি। :)


0

আপনি যদি আগে লক্ষ্য নির্দেশিকায় থাকেন:

luna:/tmp % mkdir -p a/b/c/d
luna:/tmp % pwd
/tmp
luna:/tmp % cd a/b/c/d
luna:d % pwd
/tmp/a/b/c/d
luna:d % cd -
luna:/tmp % pwd
/tmp
luna:/tmp % 

0

একবার দেখুন ডিবিবি । এটি একটি বেস স্ক্রিপ্ট যা আপনাকে নীচে বুকমার্কগুলি তৈরি করতে দেয়:

অপারেশনস

  • একটি ডিরেক্টরি বুকমার্ক সংরক্ষণ করুন
  • g একটি বুকমার্ক বা নামী ডিরেক্টরিতে যান
  • পি দির স্ট্যাকের উপর একটি বুকমার্ক / ডিরেক্টরি টিপুন
  • সংরক্ষিত বুকমার্ক সরান
  • d বুকমার্কড ডিরেক্টরি পথ প্রদর্শন করুন
  • sl ডিরেক্টরি বুকমার্কগুলির তালিকা মুদ্রণ করুন

খুব সহজ, খুব কার্যকর।


0

@ গ্রেগরির উত্তর থেকে আরও ধাপ:

function cd_up() {
if [ -z "$1" ]; then
    cd ..
else
    cd $(printf "%0.s../" $(seq 1 $1 ))
fi
}
alias 'cdd'='cd_up'

এটাই :

// go up 1 directory level 
$cdd

// go up 3 directory level 
$cdd 3

0

এই একই একই সমস্যায় অসুস্থ হয়ে পড়ে এবং ফলস্বরূপ সিডি-প্লাস লেখা শেষ হয়েছিল । একটি একক ফাইল সিএলআই ইউটিলিটি যা আপনাকে একাধিক ডিরেক্টরি সিডি করতে দেয়।

ব্যবহার

echo `pwd` # /foo/bar/foobar/baz/foobaz/bazfoo
d baz

echo `pwd` # /foo/bar/

0

আপনার সাথে নীচের কোডটি যুক্ত করা তিনটি প্লাস ডট স্বরলিপিটি সম্মানের জন্য সম্পূর্ণতা .bashrcবাড়িয়ে দেবেcd

_cd_dot_expansion() {
    local path="${COMP_WORDS[COMP_CWORD]}"

    if [[ "${path}" =~ ^\.{3,} ]]; then
        local dots="${BASH_REMATCH}"
        local levels="${#dots}"
        local tail="${path##*...}"
        local expanded_dots='..'

        # the loop starts at two because the first set of dots is
        # assigned to `expanded_dots` when it is initialized
        for (( i = 2; i < "${levels}"; i++ )); do
            expanded_dots+='/..'
        done

        path="${expanded_dots}${tail}"
        COMPREPLY=( $( compgen -A file "${path}" ) )

        return
    fi

    _cd
}

complete -o nospace -F _cd_dot_expansion cd

এই স্নিপেটটি একবার আপনার ব্যাশ শেল টাইপিংয়ে চালিত হলে cd .../এবং হিট করা দু'টি স্তরের উপরে থাকা সমস্ত ডিরেক্টরিগুলির আপেক্ষিক পাথের তালিকাটি <TAB>পূর্ণ করে দেবে ../../এবং উদাহরণস্বরূপ।

আপডেট : উপরের কোডটিতে উল্লেখ পদ্ধতিটিতে bash-completionঅ্যাক্সেস পেতে অবশ্যই ইনস্টল করা উচিত be _cdএটি বেশিরভাগ কমান্ড লাইন প্যাকেজ পরিচালকদের মাধ্যমে ইনস্টলযোগ্য

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