2012-04-09 3 views
1

ユーザーからの入力を絶対パスとして取得するスクリプトがあります(fselectダイアログボックスを使用)。したがってユーザ入力からディレクトリをバックアップする絶対パスを使用してtarを使用するにはどうすればよいですか?

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

、私の中で:

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

しかし私は、これは絶対ディレクトリ・パス(* 1)を備えので、代わりに私は(外でのスクリプト)未遂

tar cvzf backup.tar.gz $backupdir 

を使用しました私が使用できるスクリプト:

pathtodir = dirname $backupdir 

は、バックアップディレクトリの$のPATHを取得するが、私は、バックアップすなわちしたいディレクトリの名前を必要とする:

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

がどのように私は$の名前はdirnameはできますか?

1 - 私が最初に質問を把握するためにいくつかの困難があった正直に言うと、

+0

GNU tar?もしそうなら、 '--strip-components = NUM​​BER' ... – 0xC0000022L

+0

を調べて、それが抽出されるようにしますか? – Sheldon

+0

それは梱包中です。 AFAIKの両方の場合に '-C'を使うことができます。そうでない場合でも、サブシェルの中で '(cd $ dirname && tar ...)'を実行することができます(サブシェルが終了した後に古いcwdを復元する)。ああ、私は議論の順序が役割を果たすかもしれないと思う。 '-C'を最初のパラメータとして、あるいは' f'とその引数の前に置いてください。 – 0xC0000022L

答えて

1

わかりました「とメンバー名から `/」主要な取り外し」を参照。私はコメントでそれをソートしたと思う。

$backupdirには、バックアップディレクトリの絶対パスと、バックアップディレクトリの親ディレクトリである$pathtodirが含まれています。次のように

あなたは今bashで文字列置換を使用することができます。

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

私はまだ何かを誤解している場合、私に知らせて、私はそれに応じて答えを調整します。

関連する問題