কিভাবে একটি ফাইল পুরো পথ পেতে?


717

এর কোনও সহজ উপায় কি আমি পুরো পথটি মুদ্রণ করতে পারি file.txt?

file.txt = /nfs/an/disks/jj/home/dir/file.txt

দ্য <command>

dir> <command> file.txt  

মুদ্রণ করা উচিত

/nfs/an/disks/jj/home/dir/file.txt

উত্তর:


1187

রিডলিঙ্ক ব্যবহার করুন :

readlink -f file.txt

32
এটাই '-ফ' এর জন্য।
ফিল্মকার


5
মাত্র 10.9.2 এ পরীক্ষা করা হয়েছে, সূক্ষ্মভাবে কাজ করে। যা রিডলিঙ্ক / ইউএসআর / স্থানীয় / অপ্ট / কোর্টিলস / লিবেক্সেক / জ্ঞানুবিন / রিডলিংক রিডলিংক - রূপান্তর পাঠ্য লিঙ্ক (জিএনইউ কোর্টিলস) 8.22
জেএইচএনজি

10
@ জেএইচএনজি ৪ল্ট: এর কারণ আপনি হোমব্রু দিয়ে কোর্টিলগুলি ইনস্টল করেছেন এবং আপনার প্যাথটিকে পরিবর্তন করে অনির্ধারিত বাইনারিগুলিতে নির্দেশ করেছেন। কোর্টিল ইনস্টল করা, PATH একা রেখে, এবং "গ্রেডলিঙ্ক" ব্যবহার করাও কাজ করবে।
টিম স্মিথ

35
ম্যাক-এ: হোমব্রিউটি ইনস্টল করুন brew install coreutilsতারপরেgreadlink -f file.txt
ক্রা

217

আমি মনে করি আপনি লিনাক্স ব্যবহার করছেন।

আমি realpathকোরিউটিলেস 8.15 নামক একটি ইউটিলিটি পেয়েছি ।

realpath file.txt
/data/ail_data/transformed_binaries/coreutils/test_folder_realpath/file.txt

@ স্টাইলফোম-ফ্লাই এবং @ আর্চ-স্ট্যান্ডটোন মন্তব্য অনুসারে, যুক্তিটি realpathসমাধান করার জন্য একাই ফাইল অস্তিত্বের জন্য যাচাই করে না e:realpath -e file


সাইগউইনের সাথে কাজ করে (পুদিনা ২.7.৯ সহ)
স্ক্রাম্বো

1
realpath২০১১ সালের কোর্টিলস রেপো শেষের প্রতি প্রতিশ্রুতিবদ্ধ হয়েছিল, মুক্তি ছিল ৮.১৫ জানুয়ারী, ২০১২ এর মার্চ মাসে হয়েছিল, আমি প্রশ্নের উত্তর দিয়েছি ( readlinkপরামর্শ দিয়ে) মার্চ ২০১১ :)
চিত্রনায়িকা

2
রিয়েলপথ ফাইলটির অস্তিত্বের জন্য যাচাই করে না, এটি কেবল পথগুলি সমাধান করে। একটি বিদ্যমান ফাইলের পুরো পথ জিজ্ঞাসা করার ফলে একটি ত্রুটি হতে পারে।
স্টাইলফোম ফ্লাই

4
realpath -eযুক্তি উপস্থিত না থাকলে @ স্টায়ারফোমফ্লাই একটি ত্রুটি মুদ্রণ করে।
আর্চ স্টান্টন

76

নিম্নলিখিতটি সাধারণত কৌশলগুলি করে:

 echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")

হ্যালো. আমি এই উত্তরটি আমার প্রয়োজন অনুসারে সবচেয়ে ভাল পেয়েছি। আপনি কী ব্যাখ্যা করতে পারেন কীভাবে আমি কমান্ড লাইন প্যারামিটারের পরিবর্তে স্থানীয় ভেরিয়েবলটি ব্যবহার করতে পারি (উদাহরণস্বরূপ $ 1)
ডিজে

1
LOCAL_VARIABLE="filename.txt" && echo $(cd $(dirname "$LOCAL_VARIABLE") && pwd -P)/$(basename "$LOCAL_VARIABLE")
stiemannkj1

7
@ সোপালাজোডেআরিরিজেজ readlinkফাইলটি একটি সিমিলিংক হিসাবে কাজ করে না বলে এটি আপনাকে সিমলিংকের পরিবর্তে সিমলিংকের লক্ষ্য প্রদর্শন করবে।
qwertzguy

1
আমি এটি পছন্দ করি, কারণ readlinkপ্রতীকী লিঙ্কটি যেখান থেকে উৎপন্ন করে সেখানে আমাকে আবার পিতামাতায় নিয়ে যায় তবে এটি এড়িয়ে যায়।
সুখি

set .. && echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1") ### আউটপুট: / হোম / রবি / ..
টম হেল

35

আমি জানি এটির একটি সহজ উপায় আছে তবে আমি যদি এটির সন্ধান করতে পারি তবে উপহাস ...

jcomeau@intrepid:~$ python -c 'import os; print(os.path.abspath("cat.wav"))'
/home/jcomeau/cat.wav

jcomeau@intrepid:~$ ls $PWD/cat.wav
/home/jcomeau/cat.wav


14

আপনি যদি ফাইলটির মতো একই ডিরেক্টরিতে থাকেন:

ls "`pwd`/file.txt"

file.txtআপনার লক্ষ্য ফাইলের নামটি প্রতিস্থাপন করুন ।


9
echo $(pwd)/file.txt
অ্যালেক্স

12

উইন্ডোজে:

  • হোল্ডিং Shiftউইন্ডোজ এক্সপ্লোরার একটি ফাইল-এ এবং ডান ক্লিক করলে আপনার কাছে নামক একটি বিকল্প দেয় Copy as Path। এটি ক্লিপবোর্ডে ফাইলের পুরো পথ অনুলিপি করবে।

লিনাক্সে:

  • realpath yourfileঅন্যদের পরামর্শ অনুসারে আপনি কোনও ফাইলের পুরো পাথ পেতে কমান্ডটি ব্যবহার করতে পারেন ।

4

আমি জানি যে এটি এখন একটি পুরানো প্রশ্ন, তবে কেবল এখানে তথ্য যুক্ত করতে:

লিনাক্স কমান্ড whichব্যবহার করে একটি কমান্ড ফাইলের ফাইলপথ খুঁজে পাওয়া যায়

$ which ls
/bin/ls

এর কিছু সতর্কতা রয়েছে; দয়া করে https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/ দেখুন


5
এই উত্তরটি খুব নির্দিষ্ট, ওপি আদেশগুলি সন্ধান করার জন্য নয় about
এএল

4

ম্যাক, লিনাক্স, * নিক্সে কাজ করে:

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

ls | xargs -I {} echo "$(pwd -P)/{}" | xargs | sed 's/ /","/g'

এর আউটপুট সহজেই অজগর তালিকায় বা অন্য কোনও অনুরূপ ডেটা স্ট্রাকচারে অনুলিপি করা যায়।


বর্তমান pwd পথ মুদ্রণ করে
Sand1512

হ্যাঁ, কৌমা পিডব্লুডিতে সমস্ত ফাইলের জন্য সম্পূর্ণ পাথ পৃথক করেছে, একটি ফাইলের জন্য কেবল 'ls' পরিবর্তে ls 'ফাইলের নাম' করুন।
ভর্গব শ্রিনিবাসন

3

আপনি fpn (পুরো পথের নাম) স্ক্রিপ্টটি ব্যবহার করতে পারেন :

% pwd
/Users/adamatan/bins/scripts/fpn

% ls
LICENSE   README.md fpn.py

% fpn *
/Users/adamatan/bins/scripts/fpn/LICENSE
/Users/adamatan/bins/scripts/fpn/README.md
/Users/adamatan/bins/scripts/fpn/fpn.py

fpnকোনও স্ট্যান্ডার্ড লিনাক্স প্যাকেজ নয়, তবে এটি একটি ফ্রি এবং ওপেন গিথুব প্রকল্প এবং আপনি এটি এক মিনিটের মধ্যে সেট আপ করতে পারেন


1
সাধারণত, pwdনিজে থেকেই লিনাক্স এবং অন্যান্য ইউনিক্স-এর মতো ওএস পরিবেশে সূক্ষ্মভাবে চালানো উচিত।
করোলাস

3

আপনি এই ফাংশনটি ব্যবহার করতে পারেন। যদি ফাইলের নাম আপেক্ষিক পাথ ছাড়াই দেওয়া হয়, তবে এটি বর্তমান কার্যক্ষম ডিরেক্টরিতে উপস্থিত বলে ধরে নেওয়া হবে:

abspath() { old=`pwd`;new=$(dirname "$1");if [ "$new" != "." ]; then cd $new; fi;file=`pwd`/$(basename "$1");cd $old;echo $file; }

ব্যবহার:

$ abspath file.txt
/I/am/in/present/dir/file.txt

আপেক্ষিক পথে ব্যবহার:

$ abspath ../../some/dir/some-file.txt
/I/am/in/some/dir/some-file.txt

ফাইলের নামের ফাঁকা স্থান সহ:

$ abspath "../../some/dir/another file.txt"
/I/am/in/some/dir/another file.txt

2

অনুরূপ দৃশ্যে, আমি অন্য কোনও স্থান থেকে একটি শেসিল স্ক্রিপ্ট চালু করছি। স্ক্রিপ্টের সঠিক নিখুঁত পাথ সেট করার জন্য যাতে এটি কেবল নির্ধারিত ডিরেক্টরিতে চলে, আমি নিম্নলিখিত কোডটি ব্যবহার করছি:

set script_dir = `pwd`/`dirname $0`

$0 স্ক্রিপ্টটি কীভাবে কার্যকর করা হয়েছিল তা সঠিক স্ট্রিং সঞ্চয় করে।

যেমন যদি স্ক্রিপ্ট ভালো চালু করা হয় জন্য: $> ../../test/test.csh, $script_dirউপস্থিত থাকবে/home/abc/sandbox/v1/../../test


এটি সবচেয়ে সহজ এবং প্রাসঙ্গিক হওয়ায় এটির জন্য ভোট দিয়েছেন। তবে আপনি যদি টাইপ করেন তবে ./test.cshআপনার একটি পথ শেষ হবে/test/.
ভিনিয়েল

2

ম্যাক ওএস এক্সের জন্য, আমি অপারেটিং সিস্টেমের সাথে আসা ইউটিলিটিগুলি প্রতিস্থাপন করেছি এবং সেগুলি কোর্টিলের নতুন সংস্করণ দিয়ে প্রতিস্থাপন করেছি। এটি আপনাকে আপনার ম্যাকের ( readlink -fফাইলগুলির নিখুঁত পাথের জন্য) এবং realpath(ডিরেক্টরিগুলির নিখুঁত পথ ) এর মতো সরঞ্জামগুলিতে অ্যাক্সেস করার অনুমতি দেয় ।

Homebrew সংস্করণ কমান্ডের নাম সামনে appends একটি 'জি' (গনুহ সরঞ্জাম জন্য) - তাই সমতুল হয়ে greadlink -f FILEএবং grealpath DIRECTORY

কিভাবে Homebrew মাধ্যমে ম্যাক অপারেটিং সিস্টেমে coreutils / গনুহ সরঞ্জাম ইনস্টল করতে নির্দেশাবলী খুঁজে পাওয়া যেতে পারে এই StackExchange arcticle

বিশেষ দ্রষ্টব্য: দ্য readlink -fএবং realpathকমান্ড অ ম্যাক ইউনিক্স ব্যবহারকারীদের জন্য বাক্সের বাইরে কাজ করা উচিত।


2
brew install coreutils
করার ক্রা

2
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")

এটি @ জেরেমজের উত্তরে কী চলছে তার ব্যাখ্যা :

  1. এই স্ক্রিপ্টটি যুক্তি হিসাবে আপেক্ষিক পথ পায় get "$1"
  2. তারপরে আমরা সেই পথটির ডেরনাম অংশ পেয়েছি (আপনি এই স্ক্রিপ্টে দির বা ফাইল দুটি পাস করতে পারেন):dirname "$1"
  3. তারপরে আমরা cd "$(dirname "$1")এই আপেক্ষিক দির .ুকি
  4. && pwd -Pএবং এর জন্য পরম পথ পান path -Pবিকল্প সমস্ত symlinks এড়ানো হবে
  5. এর পরে আমরা বেসনেমকে পরম পথে যুক্ত করি:$(basename "$1")
  6. চূড়ান্ত পদক্ষেপ হিসাবে আমরা echoএটা

1

এটা আমার জন্য বেশ ভাল কাজ করেছে। এটি ফাইল সিস্টেমে নির্ভর করে না (প্রয়োজনের ভিত্তিতে একটি প্রো / কন) তাই এটি দ্রুত হবে; এবং, এটি বেশিরভাগ যে কোনও * এনআইএক্সের কাছে পোর্টেবল হওয়া উচিত। এটি ধরে নিচ্ছে যে পাস করা স্ট্রিংটি PWD এর সাথে সম্পর্কিত এবং অন্য কোনও ডিরেক্টরি নয়।

function abspath () {
   echo $1 | awk '\
      # Root parent directory refs to the PWD for replacement below
      /^\.\.\// { sub("^", "./") } \
      # Replace the symbolic PWD refs with the absolute PWD \
      /^\.\//   { sub("^\.", ENVIRON["PWD"])} \
      # Print absolute paths \
      /^\//   {print} \'
}

1

এটি নিষ্পাপ, তবে আমার এটি পসিক্স অনুগত হতে হবে। ফাইলের ডিরেক্টরিতে সিডি করার অনুমতি প্রয়োজন।

#!/bin/sh
if [ ${#} = 0 ]; then
  echo "Error: 0 args. need 1" >&2
  exit 1
fi


if [ -d ${1} ]; then


  # Directory


  base=$( cd ${1}; echo ${PWD##*/} )
  dir=$( cd ${1}; echo ${PWD%${base}} )

  if [ ${dir} = / ]; then
    parentPath=${dir}
  else
    parentPath=${dir%/}
  fi

  if [ -z ${base} ] || [ -z ${parentPath} ]; then
    if [ -n ${1} ]; then
      fullPath=$( cd ${1}; echo ${PWD} )
    else
      echo "Error: unsupported scenario 1" >&2
      exit 1
    fi
  fi

elif [ ${1%/*} = ${1} ]; then

  if [ -f ./${1} ]; then


    # File in current directory

    base=$( echo ${1##*/} )
    parentPath=$( echo ${PWD} )

  else
    echo "Error: unsupported scenario 2" >&2
    exit 1
  fi
elif [ -f ${1} ] && [ -d ${1%/*} ]; then


  # File in directory

  base=$( echo ${1##*/} )
  parentPath=$( cd ${1%/*}; echo ${PWD} )

else
  echo "Error: not file or directory" >&2
  exit 1
fi

if [ ${parentPath} = / ]; then
  fullPath=${fullPath:-${parentPath}${base}}
fi

fullPath=${fullPath:-${parentPath}/${base}}

if [ ! -e ${fullPath} ]; then
  echo "Error: does not exist" >&2
  exit 1
fi

echo ${fullPath}

0

সাধারণত:

find `pwd` | grep <filename>

বিকল্পভাবে, কেবলমাত্র বর্তমান ফোল্ডারের জন্য:

find `pwd` -maxdepth 1 | grep <filename>

এইচএম কেন ঘৃণা?
sjas

0

আমি ইতিমধ্যে প্রদত্ত অনেকগুলি উত্তর আমার পছন্দ হয়েছে তবে আমি বিশেষত স্ক্রিপ্টের মধ্যে একটি ফাইলের সম্পূর্ণ পাথ প্রাপ্ত করার জন্য, যেমন নীচের সিমলিঙ্কগুলি এবং আপেক্ষিক রেফারেন্স সহ .এবং..

dirname `readlink -e relative/path/to/file`

যা fileমূল পথ থেকে এর সম্পূর্ণ পথটি ফিরে আসবে । এটি কোনও স্ক্রিপ্টে ব্যবহার করা যেতে পারে যাতে স্ক্রিপ্টটি জানতে পারে যে এটি কোন পাথ থেকে চলছে, যা কোনও সংগ্রহস্থল ক্লোনে কার্যকর যা কোনও মেশিনের যে কোনও জায়গায় অবস্থিত হতে পারে।

basePath=`dirname \`readlink -e $0\``

আমি তারপর ব্যবহার করতে পারেন ${basePath} অন্যান্য স্ক্রিপ্টগুলিকে সরাসরি উল্লেখ করতে আমার স্ক্রিপ্টগুলিতে পরিবর্তনশীলটি ।

আশাকরি এটা সাহায্য করবে,

ডেভ


0

আপনি shell.rcএটি আপনার বা কেবল কনসোলে রেখে সংরক্ষণ করতে পারেন

function absolute_path { echo "$PWD/$1"; }
alias ap="absolute_path"

উদাহরণ:

ap somefile.txt

আউটপুট হবে

/home/user/somefile.txt

3
তবে তা ap ../foobar.txtদেবে /home/user/../foobar.txt, যা সাধারণত যা চান তা নয়।
বিডেশাম

2
এছাড়াও ap /tmp/foobar.txtদেব /home/user//tmp/foobar.txt, যা ভুল।
ডেভিড

-1
find / -samefile file.txt -print

একই ইনোড নম্বরযুক্ত ফাইলের সমস্ত লিঙ্ক সন্ধান করবে file.txt যাও হিসাবে

একটি -xdevপতাকা যুক্ত করা findডিভাইস সীমানা ("মাউন্ট পয়েন্ট") এড়াতে এড়াবে। (তবে এটি সম্ভবত findএকই ডিভাইসের ডিরেক্টরিতে ডিরেক্টরি না শুরু করলে কিছুই খুঁজে পাওয়া যাবে না file.txt)

মনে রাখবেন যে findকোনও একক ফাইল সিস্টেমের বস্তুর জন্য একাধিক পাথের প্রতিবেদন করতে পারে, কারণ একটি ইনোড একাধিক ডিরেক্টরি এন্ট্রি দ্বারা সংযুক্ত হতে পারে, সম্ভবত এমনকি বিভিন্ন নাম ব্যবহার করে। এই ক্ষেত্রে:

find /bin -samefile /bin/gunzip -ls

আউটপুট দেবে:

12845178    4 -rwxr-xr-x   2 root     root         2251 feb  9  2012 /bin/uncompress
12845178    4 -rwxr-xr-x   2 root     root         2251 feb  9  2012 /bin/gunzip

-1

এটি ফাইল এবং ফোল্ডার উভয়ের জন্যই কাজ করবে:

getAbsolutePath(){
    [[ -d $1 ]] && { cd "$1"; echo "$(pwd -P)"; } || 
    { cd "$(dirname "$1")" || exit 1; echo "$(pwd -P)/$(basename "$1")"; }
}


-1

অন্য একটি লিনাক্স ইউটিলিটি, এটি এই কাজটি করে:

fname <file>

-1

ম্যাক ওএসের জন্য, যদি আপনি সন্ধানকারীটিতে কেবল কোনও ফাইলের পাথ পেতে চান তবে ফাইলটি নিয়ন্ত্রণ করুন এবং নীচে "পরিষেবাদি" তে স্ক্রোল করুন। আপনি "অনুলিপি পথ" এবং "সম্পূর্ণ পাথ অনুলিপি" সহ অনেক পছন্দ পান। এর মধ্যে একটিতে ক্লিক করা ক্লিপবোর্ডে পাথ ফেলে।


-1

ম্যাক ইন লাইন কাজ নীচে উল্লিখিত। কোনও অভিনব লাইন যুক্ত করার প্রয়োজন নেই।

> pwd filename

6
কমান্ডের নাম অনুসারে এটি কেবল ওয়ার্কিং ডিরেক্টরি (ফাইলের নাম ছাড়াই) মুদ্রণ করেprint working directory
anilbey

-2
fp () {
PHYS_DIR=`pwd -P`
RESULT=$PHYS_DIR/$1
echo $RESULT | pbcopy
echo $RESULT
}

আপনার ক্লিপবোর্ডে পাঠ্যটি অনুলিপি করে টার্মিনাল উইন্ডোটিতে পাঠ্যটি প্রদর্শন করে।

:)

(আমি অন্য স্ট্যাক ওভারফ্লো উত্তর থেকে কিছু কোড অনুলিপি করেছিলাম তবে সে উত্তরটি আর খুঁজে পাচ্ছি না)


-2

সবচেয়ে সহজ উপায় আমি খুঁজে পেয়েছি

for i in `ls`; do echo "`pwd`/$i"; done

এটি আমর জন্য ভাল কাজ করছে


-2

ম্যাক ওএসএক্স-এ নিম্নলিখিত পদক্ষেপগুলি করুন:

  1. cd লক্ষ্য ফাইলের ডিরেক্টরিতে।
  2. নিম্নলিখিত দুটি টার্মিনাল কমান্ড টাইপ করুন।
প্রান্তিক
ls "`pwd`/file.txt"
echo $(pwd)/file.txt
  1. প্রতিস্থাপন করা file.txtআপনার প্রকৃত ফাইলের নামটি ।
  2. প্রেস Enter

-3

"রিডলিঙ্ক -f" এর পাশাপাশি অন্য একটি সাধারণভাবে ব্যবহৃত আদেশ:

$find  /the/long/path/but/I/can/use/TAB/to/auto/it/to/ -name myfile
/the/long/path/but/I/can/use/TAB/to/auto/it/to/myfile
$

এটি কনসোলে পুরো পথ এবং ফাইলের নাম দেয়

অফ-টপিক: এই পদ্ধতিটি কেবল নিখুঁত নয়, আপেক্ষিক লিঙ্ক দেয় । readlink -fকমান্ড অধিকার নেই।


-3

নীচের মত একটি ফাংশন তৈরি করুন (পিডাব্লুডির সাথে একটি ফাইলের পরম পাথ প্রতিধ্বনিত করে এবং পথের শেষে ফাইলটি যুক্ত করে:

abspath() { echo $(pwd "$1")/"$1"; }

এখন আপনি যে কোনও ফাইলের পথ খুঁজে পেতে পারেন:

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