web-dev-qa-db-ja.com

ファイルのフルパスを取得する方法

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

私はあなたがLinuxを使っていると思います。

私はcoreutils 8.15でrealpathというユーティリティを見つけました。

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

ウィンドウズであなたができる: -

  • Shiftキーを押しながらファイルを右クリックすると、"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が表示されます。

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

これの出力はpythonリストまたは同様のデータ構造に簡単にコピーすることができます。

3

Mac OS Xでは、オペレーティングシステムに付属のユーティリティを置き換え、新しいバージョンのcoreutilsに置き換えました。これにより、Mac上でreadlink -f(ファイルへの絶対パス用)やrealpath(ディレクトリへの絶対パス用)などのツールにアクセスできます。

自作バージョンでは、コマンド名の前に(GNU Tools用の) 'G'が追加されます。したがって、同等のものはgreadlink -f FILEおよびgrealpath DIRECTORYになります。

Homebrewを介してMac OS Xにcoreutils/GNUツールをインストールする方法についての説明は このStackExchange arcticle にあります。

注意:readlink -fおよびrealpathコマンドは、Mac以外のUNIXユーザーにとってはそのまま使用できるはずです。

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

これは@ ZeRemzの answer で何が起こっているのかの説明です。

  1. このスクリプトは引数として相対パスを取得します"$1"
  2. それからそのパスの dirname の部分を取得します(このスクリプトにはdirかfileのどちらかを渡すことができます):dirname "$1"
  3. それから私達はこの相対的なディレクトリにcd "$(dirname "$1")
  4. && pwd -Pとその絶対パスを取得します。 -Pオプションはすべてのシンボリックリンクを回避します
  5. その後、絶対パスに basename を追加します。$(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"

例:

ap somefile.txt

出力します

/home/user/somefile.txt

1

これは私にとってかなりうまくいった。ファイルシステム(必要に応じて長所/短所)に依存しないので、高速になります。そして、ほとんどすべての* 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} \'
}
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

下記のMacでは行が動きます。ファンシーラインを追加する必要はありません。

> pwd filename
0
Sanjeet kumar