回答:
brew install coreutilsからgreadlink -f file.txt
                    Linuxを使用していると思います。
realpathcoreutils 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
realpath2011年末にcoreutilsレポにコミットし、リリース8.15は2012年1月に行われ、readlink2011年3月に(提案とともに)質問に回答しました:)
                    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
私はこれが古い質問であることを知っていますが、ここに情報を追加するだけです:
Linuxコマンドwhichを使用して、コマンドファイルのファイルパスを見つけることができます。
$ which ls
/bin/ls
これにはいくつかの注意点があります。https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/を参照してください。
Mac、Linux、* nixで動作します:
これにより、現在のディレクトリにあるすべてのファイルの引用されたcsvが得られます。
ls | xargs -I {} echo "$(pwd -P)/{}" | xargs | sed 's/ /","/g'
この出力は、Pythonリストまたは同様のデータ構造に簡単にコピーできます。
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プロジェクトであり、すぐにセットアップできます。
pwd、それ自体は、Linuxおよび他のほとんどのUnixライクなOS環境で正常に動作するはずです。
                    この関数を使用できます。ファイル名が相対パスなしで指定されている場合、現在の作業ディレクトリに存在すると見なされます。
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
同様のシナリオで、他の場所からcshellスクリプトを起動しています。指定されたディレクトリでのみ実行されるようにスクリプトの正しい絶対パスを設定するために、次のコードを使用しています。
set script_dir = `pwd`/`dirname $0`
$0 スクリプトが実行された正確な文字列を格納します。
スクリプトは次のように起動された場合の例を示します$> ../../test/test.csh、
 $script_dir含まれています/home/abc/sandbox/v1/../../test
./test.csh場合、パスが次のようになります/test/.
                    Mac OS Xの場合、オペレーティングシステムに付属のユーティリティを置き換え、新しいバージョンのcoreutilsに置き換えました。これにより、readlink -f(ファイルへの絶対パスの)およびrealpath、Macの((ディレクトリへの絶対パス。
Homebrewバージョンでは、コマンド名の前に「G」(GNUツールの場合)が追加されます。したがって、同等のものはgreadlink -f FILEおよびになりgrealpath DIRECTORYます。
Corebutils / GNUツールをHomebrew経由でMac OS Xにインストールする方法の説明は、このStackExchangeアークティクルにあります。
注:Mac以外のUnixユーザーの場合readlink -f、およびrealpathコマンドはそのまま使用できます。
brew install coreutils
                    echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
これは@ZeRemzの答えで何が起こっているかの説明です:
"$1"dirname "$1"cd "$(dirname "$1")、この相対ディレクトリに入ります&& pwd -Pその絶対パスを取得します。-Pオプションはすべてのシンボリックリンクを回避します$(basename "$1")echoにこれはかなりうまくいきました。ファイルシステム(必要に応じて賛否両論)に依存しないため、高速になります。そして、それはほとんどすべての* NIXに移植可能であるべきです。渡された文字列が実際には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} \'
}
これは素朴ですが、POSIXに準拠させる必要がありました。ファイルのディレクトリにcdする権限が必要です。
#!/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 と同じiノード番号を持つファイルへのすべてのリンクを検索します
-xdevフラグを追加すると、findデバイスの境界(「マウントポイント」)を越えることが回避されます。(ただし、がfind同じデバイス上のディレクトリで開始しない場合、これはおそらく何も見つかりませんfile.txt)
findInodeは複数のディレクトリエントリによってリンクされている可能性があるため、1つのファイルシステムオブジェクトの複数のパスを報告できることに注意してください。例えば:
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
これはLinuxとMac OSXの両方で動作します。
 echo $(pwd)$/$(ls file.txt)
Mac OSの場合、ファインダーでファイルのパスを取得するだけの場合は、ファイルをコントロールクリックし、下部にある[サービス]までスクロールします。「パスのコピー」や「フルパスのコピー」など、多くの選択肢があります。これらの1つをクリックすると、パスがクリップボードに配置されます。
Mac OSXでは、次の手順を実行します。
cd ターゲットファイルのディレクトリに。ls "`pwd`/file.txt"
echo $(pwd)/file.txt
file.txt実際のファイル名にます。"readlink -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コマンドが正しいものです。