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
readlink を使用します。
readlink -f file.txt
私はあなたが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
通常、次のようにします。
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*"
ファイルと同じディレクトリにいる場合:
ls "`pwd`/file.txt"
file.txt
をターゲットのファイル名に置き換えます。
"Copy as Path"
というオプションが表示されます。realpath yourfile
。私はこれが今のところ古い質問であることを知っていますが、ここに情報を追加するためだけに:
Linuxコマンドwhich
は、コマンドファイルのファイルパスを見つけるために使用できます。
$ which ls
/bin/ls
これにはいくつか注意点があります。 https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/ を参照してください。
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プロジェクト であなたは すぐにセットアップできます .
Mac、Linux、* nixで動作します:
これにより、現在のディレクトリにあるすべてのファイルの引用csvが表示されます。
ls | xargs -I {} echo "$(pwd -P)/{}" | xargs | sed 's/ /","/g'
これの出力はpythonリストまたは同様のデータ構造に簡単にコピーすることができます。
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ユーザーにとってはそのまま使用できるはずです。
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
これは@ ZeRemzの answer で何が起こっているのかの説明です。
"$1"
dirname "$1"
cd "$(dirname "$1")
&& pwd -P
とその絶対パスを取得します。 -P
オプションはすべてのシンボリックリンクを回避します$(basename "$1")
echo
にします。同様のシナリオで、私は他の場所からcshellスクリプトを起動しています。指定されたディレクトリでのみ実行されるようにスクリプトの正しい絶対パスを設定するには、次のコードを使用します。
set script_dir = `pwd`/`dirname $0`
$0
はスクリプトがどのように実行されたか正確な文字列を格納します。
例えばスクリプトが次のように起動された場合:$> ../../test/test.csh
、$script_dir
には/home/abc/sandbox/v1/../../test
が含まれます。
これは素朴ですが、私はそれを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}
これをあなたの "Shell.rc"に保存するか、単にコンソールに置く
関数absolute_path {echo "$ PWD/$ 1"; }
エイリアスap = "absolute_path"
例:
ap somefile.txt
出力します
/home/user/somefile.txt
これは私にとってかなりうまくいった。ファイルシステム(必要に応じて長所/短所)に依存しないので、高速になります。そして、ほとんどすべての* 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} \'
}
この機能を使うことができます。ファイル名が相対パスなしで与えられた場合、それは現在の作業ディレクトリに存在するとみなされます。
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
下記のMacでは行が動きます。ファンシーラインを追加する必要はありません。
> pwd filename