linux - print - 如何獲得文件的完整路徑?
view path linux (19)
有沒有一種簡單的方法可以打印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
適用於Mac,Linux,* nix:
這將為您提供當前目錄中所有文件的引用csv:
ls | xargs -I {} echo "$(pwd -P)/{}" | xargs | sed 's/ /","/g'
這個輸出可以很容易地複製到python列表或任何類似的數據結構中。
以下通常會做訣竅:
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
你可以將它保存在你的“shell.rc”中,或者放在控制台中
函數absolute_path {echo“$ PWD / $ 1”; }
別名ap =“絕對路徑”
例:
ap somefile.txt
會輸出
/home/user/somefile.txt
使用readlink :
readlink -f file.txt
另一個Linux工具,可以完成這項工作:
fname <file>
在Mac OSX中,執行以下步驟:
-
cd
進入目標文件的目錄。 - 鍵入以下終端命令之一。
ls "`pwd`/file.txt"
echo $(pwd)/file.txt
- 將
file.txt
替換為您的實際文件名。 - 按Enter鍵
在類似的情況下,我從其他位置啟動cshell腳本。 為了設置腳本的正確絕對路徑,使其僅在指定目錄中運行,我使用以下代碼:
set script_dir = `pwd`/`dirname $0`
$0
存儲腳本執行的確切字符串。
例如,如果腳本是這樣啟動的: $> ../../test/test.csh
$script_dir
將包含/home/abc/sandbox/v1/../../test
如果您與文件在同一個目錄中:
ls "`pwd`/file.txt"
用你的目標文件名替換file.txt
。
對於Mac OS,如果您只想在取景器中獲取文件的路徑,請控制單擊該文件,然後向下滾動到底部的“服務”。 您會得到許多選擇,包括“複製路徑”和“複製完整路徑”。 點擊其中的一個將路徑放在剪貼板上。
我知道這有一種更簡單的方法,但如果我能找到它,我就會受到傷害......
[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
我想你正在使用Linux。
我在coreutils 8.15中發現了一個名為realpath
的實用程序。
realpath realpath
/data/ail_data/transformed_binaries/coreutils/test_folder_realpath/realpath
我發現的最簡單的方法是
for i in `ls`; do echo "`pwd`/$i"; done
這對我來說很有效
這將適用於文件和文件夾:
getAbsolutePath(){
[[ -d $1 ]] && { cd "$1"; echo "$(pwd -P)"; } ||
{ cd "$(dirname "$1")" || exit 1; echo "$(pwd -P)/$(basename "$1")"; }
}
這對我來說工作得很好。 它不依賴於文件系統(取決於需要的pro / con),所以它會很快; 而且,它應該可以移植到大多數* 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} \'
}
這適用於Linux和Mac OSX ..
echo $(pwd)$/$(ls file.txt)
通常:
find `pwd` | grep <filename>
或者,只為當前文件夾:
find `pwd` -maxdepth 1 | grep <filename>
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
這是對@ ZeRemz的answer發生了什麼的answer :
- 該腳本獲取相對路徑作為參數
"$1"
- 然後我們得到該路徑的dirname部分(您可以將dir或文件傳遞給此腳本):
dirname "$1"
- 然後我們把
cd "$(dirname "$1")
放到這個相對目錄中 -
&& pwd -P
並獲得它的絕對路徑。-P
選項將避免所有符號鏈接 - 之後,我們將basename添加到絕對路徑:
$(basename "$1")
- 作為最後一步,我們
echo
它
find $PWD -type f | grep "filename"
要么
find $PWD -type f -name "*filename*"
fp () {
PHYS_DIR=`pwd -P`
RESULT=$PHYS_DIR/$1
echo $RESULT | pbcopy
echo $RESULT
}
將文本複製到剪貼板並在終端窗口上顯示文本。
:)
(我複制了另一個堆棧溢出答案的一些代碼,但無法再找到該答案)