次のコードを理解していることを確認したいと思います。
tar xvzf FILE --exclude-from=exclude.me --strip-components 1 -C DESTINATION
に投稿しましたこの回答。
からman tar
:
--strip-components=NUMBER
抽出時にファイル名からNUMBER個の前のコンポーネントを削除します。
-C
、--directory=DIR
ディレクトリDIRに切り替える
マニュアルの説明がわかりませんでした--strip-components
。
については、-C
「削除されたコンポーネントを指定されたディレクトリに配置します」という意味で理解しています。
どういう意味ですか--strip-components -C
?
ベストアンサー1
あなたの質問に含まれるマンページの部分はGNU tar's manからのものです。 GNUは好ましいソフトウェアプロジェクトです。情報マニュアルはマンページよりも優れています。実際、tarのマンページは2014年にGNU tarソースツリーにのみ追加されました。
これは参考用であり、例を含む完全なマニュアルではありません。info tar
オンラインでも提供されている完全な情報パンフレットを読み込むことができます。ここ。これにはいくつかの--strip-components
使用例が含まれており、関連するスニペットは次のとおりです。
--strip-components=number
抽出する前に、ファイル名から指定された数の前のコンポーネントを削除します。
たとえば、「archive.tar」アーカイブに「some/file/name」が含まれている場合は、次のようにします。
tar --extract --file archive.tar --strip-components=2
このファイルは「name」ファイルに抽出されます。
そして:
--strip-components=number
抽出する前に、ファイル名から指定された数の前のコンポーネントを削除します。
たとえば、「/usr」階層全体を「usr.tar」というtarアーカイブにアーカイブしたとします。他のファイルのうち、このアーカイブには現在の作業ディレクトリに抽出したい「usr/include/stdlib.h」が含まれています。これを行うには、次のように入力します。
$ tar -xf usr.tar --strip=2 usr/include/stdlib.h
"--strip=2" オプションは、tar にファイル名の 2 つの主要部分 ("usr/" および "include/") を削除するように指示します。
言い換えれば。
以下のtarの他の実装があります。FreeBSD tar マンページこのコマンドは異なる方法で解釈されます。
--strip-components count
指定された数の先行パス要素を削除します。少数の要素を含むパス名は自動的にスキップされます。パス名は、包含/除外パターンを確認した後、セキュリティを確認する前に編集されます。
つまり、Unix パスは で区切られた一連の要素として理解する必要があります/
(1 つしかない場合を除く/
)。
これは私自身の例です(他の例は、上記のリンクされた情報パンフレットにあります。)
新しいディレクトリ構造を作成しましょう。
mkdir -p a/b/c
パスは、およびのa/b/c
3つの要素で構成されています。a
b
c
このディレクトリに空のファイルを作成し、.tarアーカイブに入れます。
$ touch a/b/c/FILE
$ tar -cf archive.tar a/b/c/FILE
FILE
パスの4番目の要素ですa/b/c/FILE
。
archive.tar の内容をリストします。
$ tar tf archive.tar
a/b/c/FILE
--strip-components
.tarファイルを抽出するときに削除するパス要素の数を示すパラメータを使用して、archive.tarを抽出できますa/b/c/FILE
。元のa
ディレクトリを削除します。
rm -r a
--strip-components=1
a
まだ再生されていないコンテンツのみを抽出します。
$ tar xf archive.tar --strip-components=1
$ ls -Al
total 16
-rw-r--r-- 1 ja users 10240 Mar 26 15:41 archive.tar
drwxr-xr-x 3 ja users 4096 Mar 26 15:43 b
$ tree b
b
└── c
└── FILE
1 directory, 1 file
ご覧のとおり、--strip-components=2
2a/b
つの要素がまだ再生成されていません。
$ rm -r b
$ tar xf archive.tar --strip-components=2
$ ls -Al
total 16
-rw-r--r-- 1 ja users 10240 Mar 26 15:41 archive.tar
drwxr-xr-x 2 ja users 4096 Mar 26 15:46 c
$ tree c
c
└── FILE
0 directories, 1 file
まだ再生成されていない--strip-components=3
3つの要素があり、実行中の同じレベルディレクトリにあります。a/b/c
FILE
tar
$ rm -r c
$ tar xf archive.tar --strip-components=3
$ ls -Al
total 12
-rw-r--r-- 1 ja users 0 Mar 26 15:39 FILE
-rw-r--r-- 1 ja users 10240 Mar 26 15:41 archive.tar
-C
このオプションは、要求されたジョブを実行する前に、tarに指定されたディレクトリに変更、抽出、およびアーカイブするように指示します。存在するこのコメント
尋ねる:
tarをCDに要求する:なぜCDを使うのですか?聞きたいです。なぜそれはMVではないのですか?
mv
なぜこれがより良いと思いますか?まず、tarアーカイブをどのディレクトリに抽出しますか?
/tmp - 欠落しているかいっぱいになるとどうなりますか?
"$TMPDIR" - 設定されていない、欠落している、またはいっぱいになるとどうなりますか?
現在のディレクトリ - ユーザーが
w
権限を持っていない場合、およびそれがある場合はr
どうなりますかx
?一時ディレクトリ(それが何であれ)に、すでにアーカイブに存在するのと同じ名前のファイルが含まれており、
tar
抽出した場合、そのファイルを上書きするとどうなりますか?一時ディレクトリ(それが何であれ)がUnixファイルシステムをサポートしておらず、所有権、実行可能ビットなどに関するすべての情報が失われるとどうなりますか?
また、これは他のプログラムでも-C
一般的に使用されるオプションです。change directory
子そして
作る私の心に最初に浮かんだのは。