ディレクトリをインポートし、別の場所から自分のホームディレクトリにそのディレクトリのアーカイブを作成しようとしています。その-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
/b
c
/d
e
foo.tar
a
追加するファイルがコマンドラインに提供されていませんが、使用されて-C /some/dir
いる場合は、そのファイル内のすべての内容がアーカイブに切り替わり、tar
追加されます。/some/dir
(したがって、解凍されたときにアーカイブファイルが見つかる-C
場所には影響しません。解凍されたファイルがどこに行くかにのみ影響します。)tar
したがって、tar czf Pictures_$CREATION_TIMESTAMP.tar.gz -C /home/$USER Pictures
fromは常にfromディレクトリ/home/$USER/coding/python_code/
にアーカイブを作成します。/home/$USER/coding/python_code/
Pictures
/home/$USER
で作成されたアーカイブにディレクトリを追加するには、Pictures
アーカイブを作成する必要があります。/home/$USER
/home/$USER
cd
/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
が行われるようにネストを削除します。