উত্তর:
রিডলিঙ্ক ব্যবহার করুন :
readlink -f file.txt
brew install coreutils
তারপরেgreadlink -f file.txt
আমি মনে করি আপনি লিনাক্স ব্যবহার করছেন।
আমি realpath
কোরিউটিলেস 8.15 নামক একটি ইউটিলিটি পেয়েছি ।
realpath file.txt
/data/ail_data/transformed_binaries/coreutils/test_folder_realpath/file.txt
@ স্টাইলফোম-ফ্লাই এবং @ আর্চ-স্ট্যান্ডটোন মন্তব্য অনুসারে, যুক্তিটি realpath
সমাধান করার জন্য একাই ফাইল অস্তিত্বের জন্য যাচাই করে না e
:realpath -e file
realpath
২০১১ সালের কোর্টিলস রেপো শেষের প্রতি প্রতিশ্রুতিবদ্ধ হয়েছিল, মুক্তি ছিল ৮.১৫ জানুয়ারী, ২০১২ এর মার্চ মাসে হয়েছিল, আমি প্রশ্নের উত্তর দিয়েছি ( readlink
পরামর্শ দিয়ে) মার্চ ২০১১ :)
realpath -e
যুক্তি উপস্থিত না থাকলে @ স্টায়ারফোমফ্লাই একটি ত্রুটি মুদ্রণ করে।
নিম্নলিখিতটি সাধারণত কৌশলগুলি করে:
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
LOCAL_VARIABLE="filename.txt" && echo $(cd $(dirname "$LOCAL_VARIABLE") && pwd -P)/$(basename "$LOCAL_VARIABLE")
readlink
ফাইলটি একটি সিমিলিংক হিসাবে কাজ করে না বলে এটি আপনাকে সিমলিংকের পরিবর্তে সিমলিংকের লক্ষ্য প্রদর্শন করবে।
readlink
প্রতীকী লিঙ্কটি যেখান থেকে উৎপন্ন করে সেখানে আমাকে আবার পিতামাতায় নিয়ে যায় তবে এটি এড়িয়ে যায়।
set .. && echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
### আউটপুট: / হোম / রবি / ..
আমি জানি এটির একটি সহজ উপায় আছে তবে আমি যদি এটির সন্ধান করতে পারি তবে উপহাস ...
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
find $PWD -type f | grep "filename"
অথবা
find $PWD -type f -name "*filename*"
find `pwd` -type file -name \*.dmp
আমি জানি যে এটি এখন একটি পুরানো প্রশ্ন, তবে কেবল এখানে তথ্য যুক্ত করতে:
লিনাক্স কমান্ড which
ব্যবহার করে একটি কমান্ড ফাইলের ফাইলপথ খুঁজে পাওয়া যায়
$ which ls
/bin/ls
এর কিছু সতর্কতা রয়েছে; দয়া করে https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/ দেখুন ।
ম্যাক, লিনাক্স, * নিক্সে কাজ করে:
এটি আপনাকে বর্তমান দির সমস্ত ফাইলের একটি উদ্ধৃত সিএসভি দেবে:
ls | xargs -I {} echo "$(pwd -P)/{}" | xargs | sed 's/ /","/g'
এর আউটপুট সহজেই অজগর তালিকায় বা অন্য কোনও অনুরূপ ডেটা স্ট্রাকচারে অনুলিপি করা যায়।
আপনি 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
কোনও স্ট্যান্ডার্ড লিনাক্স প্যাকেজ নয়, তবে এটি একটি ফ্রি এবং ওপেন গিথুব প্রকল্প এবং আপনি এটি এক মিনিটের মধ্যে সেট আপ করতে পারেন ।
pwd
নিজে থেকেই লিনাক্স এবং অন্যান্য ইউনিক্স-এর মতো ওএস পরিবেশে সূক্ষ্মভাবে চালানো উচিত।
আপনি এই ফাংশনটি ব্যবহার করতে পারেন। যদি ফাইলের নাম আপেক্ষিক পাথ ছাড়াই দেওয়া হয়, তবে এটি বর্তমান কার্যক্ষম ডিরেক্টরিতে উপস্থিত বলে ধরে নেওয়া হবে:
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
অনুরূপ দৃশ্যে, আমি অন্য কোনও স্থান থেকে একটি শেসিল স্ক্রিপ্ট চালু করছি। স্ক্রিপ্টের সঠিক নিখুঁত পাথ সেট করার জন্য যাতে এটি কেবল নির্ধারিত ডিরেক্টরিতে চলে, আমি নিম্নলিখিত কোডটি ব্যবহার করছি:
set script_dir = `pwd`/`dirname $0`
$0
স্ক্রিপ্টটি কীভাবে কার্যকর করা হয়েছিল তা সঠিক স্ট্রিং সঞ্চয় করে।
যেমন যদি স্ক্রিপ্ট ভালো চালু করা হয় জন্য: $> ../../test/test.csh
,
$script_dir
উপস্থিত থাকবে/home/abc/sandbox/v1/../../test
./test.csh
আপনার একটি পথ শেষ হবে/test/.
ম্যাক ওএস এক্সের জন্য, আমি অপারেটিং সিস্টেমের সাথে আসা ইউটিলিটিগুলি প্রতিস্থাপন করেছি এবং সেগুলি কোর্টিলের নতুন সংস্করণ দিয়ে প্রতিস্থাপন করেছি। এটি আপনাকে আপনার ম্যাকের ( readlink -f
ফাইলগুলির নিখুঁত পাথের জন্য) এবং realpath
(ডিরেক্টরিগুলির নিখুঁত পথ ) এর মতো সরঞ্জামগুলিতে অ্যাক্সেস করার অনুমতি দেয় ।
Homebrew সংস্করণ কমান্ডের নাম সামনে appends একটি 'জি' (গনুহ সরঞ্জাম জন্য) - তাই সমতুল হয়ে greadlink -f FILE
এবং grealpath DIRECTORY
।
কিভাবে Homebrew মাধ্যমে ম্যাক অপারেটিং সিস্টেমে coreutils / গনুহ সরঞ্জাম ইনস্টল করতে নির্দেশাবলী খুঁজে পাওয়া যেতে পারে এই StackExchange arcticle ।
বিশেষ দ্রষ্টব্য: দ্য readlink -f
এবং realpath
কমান্ড অ ম্যাক ইউনিক্স ব্যবহারকারীদের জন্য বাক্সের বাইরে কাজ করা উচিত।
brew install coreutils
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
এটি @ জেরেমজের উত্তরে কী চলছে তার ব্যাখ্যা :
"$1"
dirname "$1"
cd "$(dirname "$1")
এই আপেক্ষিক দির .ুকি&& pwd -P
এবং এর জন্য পরম পথ পান path -P
বিকল্প সমস্ত symlinks এড়ানো হবে$(basename "$1")
echo
এটাএটা আমার জন্য বেশ ভাল কাজ করেছে। এটি ফাইল সিস্টেমে নির্ভর করে না (প্রয়োজনের ভিত্তিতে একটি প্রো / কন) তাই এটি দ্রুত হবে; এবং, এটি বেশিরভাগ যে কোনও * এনআইএক্সের কাছে পোর্টেবল হওয়া উচিত। এটি ধরে নিচ্ছে যে পাস করা স্ট্রিংটি 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} \'
}
এটি নিষ্পাপ, তবে আমার এটি পসিক্স অনুগত হতে হবে। ফাইলের ডিরেক্টরিতে সিডি করার অনুমতি প্রয়োজন।
#!/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}
আমি ইতিমধ্যে প্রদত্ত অনেকগুলি উত্তর আমার পছন্দ হয়েছে তবে আমি বিশেষত স্ক্রিপ্টের মধ্যে একটি ফাইলের সম্পূর্ণ পাথ প্রাপ্ত করার জন্য, যেমন নীচের সিমলিঙ্কগুলি এবং আপেক্ষিক রেফারেন্স সহ .
এবং..
dirname `readlink -e relative/path/to/file`
যা file
মূল পথ থেকে এর সম্পূর্ণ পথটি ফিরে আসবে । এটি কোনও স্ক্রিপ্টে ব্যবহার করা যেতে পারে যাতে স্ক্রিপ্টটি জানতে পারে যে এটি কোন পাথ থেকে চলছে, যা কোনও সংগ্রহস্থল ক্লোনে কার্যকর যা কোনও মেশিনের যে কোনও জায়গায় অবস্থিত হতে পারে।
basePath=`dirname \`readlink -e $0\``
আমি তারপর ব্যবহার করতে পারেন ${basePath}
অন্যান্য স্ক্রিপ্টগুলিকে সরাসরি উল্লেখ করতে আমার স্ক্রিপ্টগুলিতে পরিবর্তনশীলটি ।
আশাকরি এটা সাহায্য করবে,
ডেভ
আপনি shell.rc
এটি আপনার বা কেবল কনসোলে রেখে সংরক্ষণ করতে পারেন
function absolute_path { echo "$PWD/$1"; }
alias ap="absolute_path"
উদাহরণ:
ap somefile.txt
আউটপুট হবে
/home/user/somefile.txt
ap ../foobar.txt
দেবে /home/user/../foobar.txt
, যা সাধারণত যা চান তা নয়।
ap /tmp/foobar.txt
দেব /home/user//tmp/foobar.txt
, যা ভুল।
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
এটি লিনাক্স এবং ম্যাক ওএসএক্স উভয়ের সাথেই কাজ করে ..
echo $(pwd)$/$(ls file.txt)
ম্যাক ওএসের জন্য, যদি আপনি সন্ধানকারীটিতে কেবল কোনও ফাইলের পাথ পেতে চান তবে ফাইলটি নিয়ন্ত্রণ করুন এবং নীচে "পরিষেবাদি" তে স্ক্রোল করুন। আপনি "অনুলিপি পথ" এবং "সম্পূর্ণ পাথ অনুলিপি" সহ অনেক পছন্দ পান। এর মধ্যে একটিতে ক্লিক করা ক্লিপবোর্ডে পাথ ফেলে।
ম্যাক ইন লাইন কাজ নীচে উল্লিখিত। কোনও অভিনব লাইন যুক্ত করার প্রয়োজন নেই।
> pwd filename
print working directory
ম্যাক ওএসএক্স-এ নিম্নলিখিত পদক্ষেপগুলি করুন:
cd
লক্ষ্য ফাইলের ডিরেক্টরিতে।ls "`pwd`/file.txt"
echo $(pwd)/file.txt
file.txt
আপনার প্রকৃত ফাইলের নামটি ।"রিডলিঙ্ক -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
কমান্ড অধিকার নেই।
নীচের মত একটি ফাংশন তৈরি করুন (পিডাব্লুডির সাথে একটি ফাইলের পরম পাথ প্রতিধ্বনিত করে এবং পথের শেষে ফাইলটি যুক্ত করে:
abspath() { echo $(pwd "$1")/"$1"; }
এখন আপনি যে কোনও ফাইলের পথ খুঁজে পেতে পারেন:
abspath myfile.ext