Tar は --directory オプションを無視します。

Tar は --directory オプションを無視します。

ディレクトリをインポートし、別の場所から自分のホームディレクトリにそのディレクトリのアーカイブを作成しようとしています。その-Cオプションがこの目的に使用できることはわかっていますが、無視tarされるようです。$(basename $DEST)_$(date +%F_%H%M%S).tar.gz -C $HOME $(basename $DEST)アーカイブしたいディレクトリのパスがどこにあるか試してみました。$DEST私のホームディレクトリにアーカイブを作成する代わりに、tarは私が実行したディレクトリにアーカイブを作成し続けます。 tarの実行方法に問題がありますか?フラグが完全に無視されることを除いて、他のすべてはうまく機能しているようです-C。私はLinux Mint 18.3 XFCEバージョンを使用しています。

編集する:完全なコマンドはですtar czf Pictures_$CREATION_TIMESTAMP.tar.gz -C /home/$USER Pictures/home/$USER/coding/python_code/

答え1

-Cアーカイブが作成される場所には影響しません。これは、アーカイブに追加されるファイルにのみ影響します。たとえば、指定された場合はtar cvf foo.tar a -C /b c -C /d e現在のディレクトリに追加しtar、切り替えて追加し、切り替えて追加します。現在のディレクトリ(元のディレクトリ)に作成されます。a/bc/defoo.tara

追加するファイルがコマンドラインに提供されていませんが、使用されて-C /some/dirいる場合は、そのファイル内のすべての内容がアーカイブに切り替わり、tar追加されます。/some/dir

(したがって、解凍されたときにアーカイブファイルが見つかる-C場所には影響しません。解凍されたファイルがどこに行くかにのみ影響します。)tar

したがって、tar czf Pictures_$CREATION_TIMESTAMP.tar.gz -C /home/$USER Picturesfromは常にfromディレクトリ/home/$USER/coding/python_code/にアーカイブを作成します。/home/$USER/coding/python_code/Pictures/home/$USER

で作成されたアーカイブにディレクトリを追加するには、Picturesアーカイブを作成する必要があります。/home/$USER/home/$USERcd/home/$USER

cd "/home/$USER"; tar czf "Pictures_$CREATION_TIMESTAMP.tar.gz" Pictures

または、アーカイブパスを指定します。

tar czf "/home/$USER/Pictures_$CREATION_TIMESTAMP.tar.gz" -C "/home/$USER" Pictures

答え2

一番近いところからtarマニュアルページ:

-C--directory=目次

操作を実行する前にDIRに変更してください。このオプションは順序を区別します。すべての後続のオプションに影響します。

たとえば、ディレクトリをアーカイブする正しい方法は次の/srv/wwwとおりです。

tar -C /srv/www -czf www.tgz

-C(参考までに<directort>で始まる必要があるため、オプションとして理解するためにaで表現する必要があります。)-czf-

もちろん、いつでもcd次のことを明示的に実行できます。

(cd /srv/www; tar czf - .) > www.tgz

答え3

修正していただきありがとうございます。

アーカイブするファイル名とディレクトリを指定するために、シェル変数とコマンド置換を使用しているようです。

これはあなたの要件に適しています。

tar czfv $HOME'/Pictures_'$CREATION_TIMESTAMP'.tar.gz' "$DEST" -C Pictures

v何が起こっているのかを詳しく見るために追加しました。変数$HOMEは明らかにホームディレクトリに展開されます。 $CREATION_TIMESTAMPは時間変数だと思います。あなたのステートメントはアーカイブ$DESTしたいディレクトリのパスを指定するので、通常は場所の終わりにあります。パスにスペースが含まれている場合に備えて二重引用符で囲まれていますが、$DESTスペースがない場合は削除できます。 $ CREATION_TIMESTAMPが上記の場合、$(date +%F_%H%M%S)スペースはないため、二重引用符は必要ありません。圧縮-CのみPicturesが行われるようにネストを削除します。

関連情報