2012-04-09 33 views
1

我有一個腳本,獲取來自用戶的輸入作爲絕對路徑(使用fselect對話框)。如何使用從用戶輸入到備份目錄的絕對路徑使用tar?

backupdir=$(user_select "choose a directory backup destination"); 

我用

tar cvzf backup.tar.gz $backupdir 

然而,這包括絕對目錄路徑(* 1),所以不是我嘗試(出與腳本):

tar czvf backup.tar.gz -C $PATH directory-to-backup 

因此,在我我可以使用的腳本:

pathtodir = dirname $backupdir 

獲得備份目錄的$ PATH,但我需要的目錄的名稱,我想備份即:

dirname = .. 
tar czvf backup.tar.gz -C $PATH $dirname 

我如何獲得的$名稱目錄名稱?

1 - 「卸下領先'/」會員名」

+0

GNU tar?如果是這樣,請查看'--strip-components = NUM​​BER' ... – 0xC0000022L 2012-04-09 11:51:22

+0

這樣就可以提取? – Sheldon 2012-04-09 11:53:32

+0

這是在包裝。在這兩種情況下都可以使用「-C」,AFAIK。即使沒有,你也可以在子shell中執行'(cd $ dirname && tar ...)'(在子shell退出後恢復舊的cwd)。哦,我認爲爭論的順序可能會起作用。嘗試將'-C'作爲第一個參數,或者肯定在'f'和它的參數之前。 – 0xC0000022L 2012-04-09 11:56:42

回答

1

好吧,說實話我遇到了一些困難,首先要弄清楚的問題。我認爲我們在評論中對此進行了排序。

所以你有$backupdir其中包含備份目錄的絕對路徑,加上$pathtodir這是備份目錄的父目錄。

您現在可以使用Bash中字符串替換如下:

# Replace $pathtodir with empty string inside $backupdir 
relativepath=${backupdir//$pathtodir/} 
# Now remove the leading slash, if any 
relativepath=${relativepath#/} 

如果我誤解的東西還在,讓我知道,我會調整相應的答案。

相關問題