it-swarm.asia

كيف تحصل على المسار الكامل للملف؟

هل هناك طريقة سهلة يمكنني طباعة المسار الكامل 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
607
Jean

استخدم readlink :

readlink -f file.txt
985
filmor

أفترض أنك تستخدم لينكس.

لقد وجدت أداة مساعدة تسمى realpath في coreutils 8.15.

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

وفقًا للتعليقات @ styrofoam-fly و @ Arch-standton ، realpath وحدها لا تبحث عن وجود ملف ، لحل هذا أضف الوسيطة e: realpath -e file

157
lllllllllllll

التالية عادة ما تفعل الخدعة:

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

أنا أعرف هناك طريقة أسهل لذلك ، لكنني تجرأت إذا تمكنت من العثور عليها ...

[email protected]:~$ python -c 'import os; print(os.path.abspath("cat.wav"))'
/home/jcomeau/cat.wav

[email protected]:~$ ls $PWD/cat.wav
/home/jcomeau/cat.wav
29
jcomeau_ictx
find $PWD -type f | grep "filename"

أو

find $PWD -type f -name "*filename*"
19
Anshul Gupta

إذا كنت في نفس الدليل مثل الملف:

ls "`pwd`/file.txt"

استبدل file.txt باسم الملف المستهدف.

11
Steven

في ويندوز يمكنك:

  • اضغط مع الاستمرار على زر الماوس الأيمن فوق الملف الذي يمنحك خيارًا يسمى "Copy as Path"

    سيؤدي هذا إلى نسخ المسار الكامل للملف إلى الحافظة.

في Linux ، يمكنك استخدام الأمر: -

  • realpath yourfile للحصول على المسار الكامل للملف كما اقترح الكثيرون.
9
Natesh bhat

أعلم أن هذا سؤال قديم الآن ، ولكن فقط للإضافة إلى المعلومات هنا:

يمكن استخدام أمر Linux which للعثور على مسار الملف لملف الأوامر ، أي.

$ which ls
/bin/ls

هناك بعض المحاذير لهذا ؛ يرجى الاطلاع على https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/ .

5
Lord Cat

يمكنك استخدام 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 ليست حزمة Linux قياسية ، لكنها مشروع github مجاني ومفتوح وأنت يمكنك إعداده في غضون دقيقة .

3
Adam Matan

يعمل على Mac و Linux و * nix:

سيعطيك هذا ملف csv مقتبسًا لجميع الملفات الموجودة في dir الحالي:

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

يمكن نسخ مخرجات هذا بسهولة إلى قائمة بيثون أو أي بنية بيانات مماثلة.

3
Bhargav Srinivasan

بالنسبة لنظام التشغيل Mac OS X ، قمت باستبدال الأدوات المساعدة التي تأتي مع نظام التشغيل واستبدلت بها مع إصدار أحدث من coreutils. يتيح لك هذا الوصول إلى أدوات مثل readlink -f (للمسار المطلق إلى الملفات) و realpath (المسار المطلق إلى الأدلة) على جهاز Mac.

يضيف إصدار Homebrew "G" (لـ GNU أدوات) أمام اسم الأمر - بحيث تصبح المكافئات greadlink -f FILE و grealpath DIRECTORY.

يمكن العثور على إرشادات حول كيفية تثبيت الأدوات الأساسية/أدوات جنو على نظام التشغيل Mac OS X من خلال Homebrew في هذا المسلك StackExchange .

ملاحظة: يجب أن يعمل الأمر readlink -f و realpath خارج منطقة الجزاء للمستخدمين من غير مستخدمي Mac Unix.

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

هذا هو تفسير لما يحدث في @ ZeRemz's answer :

  1. الحصول على هذا البرنامج النصي المسار النسبي كوسيطة "$1"
  2. ثم نحصل على اسم العائلة جزء من هذا المسار (يمكنك تمرير ملف أو ملف إلى هذا البرنامج النصي): dirname "$1"
  3. ثم cd "$(dirname "$1") في هذا دير النسبية
  4. && pwd -P واحصل على المسار المطلق لذلك. خيار -P سيتجنب جميع الروابط
  5. بعد ذلك نلحق الاسم الأساسي إلى المسار المطلق: $(basename "$1")
  6. كخطوة أخيرة نحن echo ذلك
2
Eugen Konkov

في سيناريو مشابه ، أقوم بإطلاق برنامج نصي cshell من موقع آخر. لإعداد المسار المطلق الصحيح للبرنامج النصي بحيث يتم تشغيله في الدليل المعين فقط ، أنا أستخدم الكود التالي:

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

يخزن $0 السلسلة الدقيقة كيف تم تنفيذ البرنامج النصي.

على سبيل المثال إذا تم تشغيل البرنامج النصي مثل هذا: $> ../../test/test.csh ، فسيحتوي $script_dir على /home/abc/sandbox/v1/../../test

2
Ackq

هذا أمر ساذج ، لكن كان علي أن أجعله متوافقًا مع POSIX. يتطلب إذن لمؤتمر نزع السلاح في دليل الملف.

#!/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}
1
Andrew Miller

يمكنك حفظ هذا في "Shell.rc" الخاص بك أو مجرد وضعه في وحدة التحكم

الدالة absolute_path {echo "$ PWD/$ 1"؛ }

الاسم المستعار ap = "absolute_path"

مثال:

ا ف ب somefile.txt

سوف الإخراج

/home/user/somefile.txt

1
Roman Rhrn Nesterov

هذا عملت بشكل جيد بالنسبة لي. لا يعتمد على نظام الملفات (محترف/حسب حسب الحاجة) لذلك سيكون سريعًا ؛ ويجب أن تكون محمولة على معظم * 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} \'
}
1
Russell Speight

يمكنك استخدام هذه الوظيفة. إذا تم إعطاء اسم الملف بدون مسار نسبي ، فمن المفترض أن يكون موجودًا في دليل العمل الحالي:

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
1
Ramu

في لجنة الهدنة العسكرية المذكورة أدناه يعمل خط. لا حاجة لإضافة أي خطوط الهوى.

> pwd filename
0
Sanjeet kumar