スクリプト用のグラフィカルプログラムを作成しようとしています。
スクリプト内では、tarを使用してtarアーカイブを作成しています。
グラフィカルプログラムから、tarアーカイブを作成するファイルの完全な名前を取得します。
tar -cvf temp.tar /home/username/dir1/dir2/selecteddir
私のtarアーカイブには、home、username、dir1、dir2、およびselecteddirが含まれていますが、tarには、selecteddirのみを含むアーカイブを作成してもらいたいのです。
-C
tar
のオプションでこれを実現します:
tar -C /home/username/dir1/dir2 -cvf temp.tar selecteddir
tar
のmanページから:
-C directory
In c and r mode, this changes the directory before adding the following files.
In x mode, change directories after opening the archive but before extracting
entries from the archive.
この問題に取り組むために使用できる2つの方法があります。
私の意見では、最初の方が簡単です。圧縮するディレクトリのすぐ上のディレクトリにcd
するだけです。この場合はdir2
になります。
$ cd /home/username/dir1/dir2/
$ tar -cvf temp.tar selecteddir
2番目の方法は、sed
式を受け取り、ファイル名に対して実行するオプション--transform
を使用することです。注:sed
式で/
をエスケープする必要があります。
$ tar -cvf temp.tar /home/username/dir1/dir2/selecteddir --transform='s/\/home\/username\/dir1\/dir2\///g'
まず、作業ディレクトリに移動し、
cd /your/working/directory/
次に、マジック*
:-)
tar -cvf temp.tar *
実際、ケタンの答えを使って問題を見つけました
tar -C/home/username/dir1/dir2 -cvf temp.tar selecteddir
Dir2にあるすべてのファイルをコピーする場合は、すべてのファイルをコピーするだけです。
tar -C/home/username/dir1/dir2 -cvf temp.tar *
ただし、dir2ディレクトリにいない場合、*は現在のディレクトリのファイルをtarするため、問題が発生します。そして、私は以下のコマンドを使用して問題を修正しました:
tar -C /home/username/dir1/dir2 -cvf temp.tar ./