相對路徑 - /home/stevin/data/APP_SERVICE/../datafile.txt
到
絕對路徑 - /home/stevin/data/datafile.txt
是否有一個內置的工具Unix如何做到這一點或任何好主意,我怎麼能實現這一點。
史蒂夫
相對路徑 - /home/stevin/data/APP_SERVICE/../datafile.txt
到
絕對路徑 - /home/stevin/data/datafile.txt
是否有一個內置的工具Unix如何做到這一點或任何好主意,我怎麼能實現這一點。
史蒂夫
readlink -f /home/stevin/data/APP_SERVICE/../datafile.txt
應該做你要找什麼,假設你的Unix/Linux有readlink
。
對不起,我沒有readLink。我在Linux 2.6.18-194.el5上 – qwarentine
什麼配置? 'readlink'通常是'coreutils'軟件包的一部分,通常默認安裝。注意它全部是小寫的,不是'readLink',而是'readlink' ... – twalberg
像這樣的東西可以幫助目錄(對於文件,與basename
附加)
echo $(cd ../dir1/dir2/; pwd)
對於文件,
filepath=../dir1/dir2/file3
echo $(cd $(dirname $filepath); pwd)/$(basename $filepath)
+1實際上'echo「$(cd $(dirname $ thingie); pwd)/ $(basename $ thingie)對於文件_and_目錄,因爲'dirname'和'basename'只是處理字符串,並不關心他們所使用的字符串是否是一個實際的FS對象 –
@TobiasKienzler哦,是的,這實際上是一個錯字,直到現在看到,一次同時擁有'../ dir1/dir2/file3'和'$ t'。我會解決這個問題。 :) – SuperSaiyan
由於OP提到甚至沒有'readlink',[這裏](http://stackoverflow.com/a/20198034/321973)'一個甚至不需要'dirname'和'basename'的解決方案...... –
基於Thrustmaster's answer而是純粹的慶典:
THING="/home/stevin/data/APP_SERVICE/../datafile.txt"
echo "$(cd ${THING%/*}; pwd)/${THING##*/}"
當然,cd
需要通往通常情況下,這可能並非總是如此 - 在這種情況下,通過編寫一個小型Python腳本,您可能會有更簡單的生活...
我很驚訝沒有人提到realpath
呢。將您的路徑傳遞給realpath
,並將其規範化。
$ ls
Changes
dist.ini
$ ls | xargs realpath
/home/steven/repos/perl-Alt-Module-Path-SHARYANTO/Changes
/home/steven/repos/perl-Alt-Module-Path-SHARYANTO/dist.ini
系統上默認安裝了'realpath'嗎? –
目前還不清楚「Unix中的內置工具」是什麼意思(OP可能意味着內部shell命令)。即使「默認安裝」也很模糊,因爲操作系統安裝程序通常允許用戶選擇要安裝的組件。至於'realpath',它帶有Debian/Ubuntu,並且只是一個apt-get/aptitude。但無論如何,OP還會問「任何好的想法」。 –
在我的系統上,我需要添加'-f'選項。 –
也許你可以更新你的問題,以表明你爲什麼認爲你需要這樣做。這是一個功能!祝你好運。 – shellter
我將相對路徑標記爲小文件,然後使用此條目將文件複製到其他位置。但是,APP_SERVICE文件夾有時可能不存在,導致使用此相對路徑進行復制失敗。 – qwarentine