जवाबों:
रीडलिंक का उपयोग करें :
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
2011 के कोरुटील्स रेपो अंत के लिए प्रतिबद्ध था, रिलीज़ 8.15 जनवरी 2012 में किया गया था, मैंने readlink
मार्च 2011 में सवाल ( सुझाव के साथ ) का जवाब दिया :)
realpath -e
यदि तर्क मौजूद नहीं है, तो @styrofoamfly एक त्रुटि प्रिंट करता है।
निम्नलिखित आमतौर पर चाल है:
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
Shift
विंडोज एक्सप्लोरर में एक फाइल पर होल्डिंग और राइट क्लिक करने से आपको ऑप्शन मिलता है Copy as Path
। यह फ़ाइल के पूर्ण पथ को क्लिपबोर्ड पर कॉपी कर देगा।realpath yourfile
किसी फ़ाइल के पूर्ण पथ को दूसरों द्वारा सुझाए गए अनुसार प्राप्त करने के लिए कमांड का उपयोग कर सकते हैं।मुझे पता है कि यह अब एक पुराना सवाल है, लेकिन यहाँ जानकारी में जोड़ने के लिए:
लिनक्स कमांड which
का उपयोग कमांड फाइल के फाइलपथ को खोजने के लिए किया जा सकता है, अर्थात
$ which ls
/bin/ls
इसके लिए कुछ संकेत हैं; कृपया देखें https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/ ।
मैक, लिनक्स, * निक्स पर काम करता है:
यह आपको वर्तमान dir में सभी फ़ाइलों का एक उद्धृत csv देगा:
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 संस्करण आदेश नाम के सामने संलग्न कर देता है एक 'जी' (जीएनयू उपकरण के लिए) - तो समकक्ष बनने greadlink -f FILE
और grealpath DIRECTORY
।
होमब्रेव के माध्यम से मैक ओएस एक्स पर कोरुटिल्स / जीएनयू उपकरण कैसे स्थापित करें, इसके निर्देश इस स्टैकएक्सचेंज आर्कटिक में मिल सकते हैं ।
NB: गैर-मैक यूनिक्स उपयोगकर्ताओं के लिए कमांड readlink -f
और realpath
कमांड बॉक्स से बाहर काम करना चाहिए।
brew install coreutils
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
यह @ ZeRemz के उत्तर पर क्या हो रहा है, इसकी व्याख्या है :
"$1"
dirname "$1"
cd "$(dirname "$1")
इस रिश्तेदार dir में&& pwd -P
और इसके लिए पूर्ण मार्ग प्राप्त करें। -P
ऑप्शन सभी सिम्बलिंक से बच जाएगा$(basename "$1")
echo
इसेयह मेरे लिए बहुत अच्छा काम किया। यह फ़ाइल सिस्टम (आवश्यकता के आधार पर एक समर्थक / कांग्रेस) पर भरोसा नहीं करता है, इसलिए यह तेज़ होगा; और, यह किसी भी * NIX के लिए पोर्टेबल होना चाहिए। यह मानता है कि पारित स्ट्रिंग वास्तव में पीडब्ल्यूडी के सापेक्ष है न कि कुछ अन्य निर्देशिका के लिए।
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
फ़ाइल के सभी लिंक फ़ाइल के रूप में एक ही इनकोड संख्या के साथ पाएंगे
-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
यह लिनक्स और मैक OSX दोनों के साथ काम करता है।
echo $(pwd)$/$(ls file.txt)
मैक ओएस के लिए, यदि आप खोजक में किसी फ़ाइल का पथ प्राप्त करना चाहते हैं, तो नियंत्रण फ़ाइल पर क्लिक करें, और नीचे "सेवाएँ" तक स्क्रॉल करें। आपको "प्रतिलिपि पथ" और "पूर्ण पथ की प्रतिलिपि" सहित कई विकल्प मिलते हैं। इनमें से किसी एक पर क्लिक करने से क्लिपबोर्ड पर रास्ता आ जाता है।
नीचे लाइन कार्यों में उल्लिखित मैक में। किसी भी फैंसी लाइनों को जोड़ने की आवश्यकता नहीं है।
> pwd filename
print working directory
Mac OSX में, निम्न चरण करें:
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
आदेश सही एक है।
नीचे की तरह एक फ़ंक्शन बनाएं (pwd के साथ फ़ाइल के पूर्ण पथ को echoes करता है और पथ के अंत में फ़ाइल जोड़ता है:
abspath() { echo $(pwd "$1")/"$1"; }
अब आप किसी भी फ़ाइल पथ को पा सकते हैं:
abspath myfile.ext