回答:
GNU tarは、featuritisに依存しているため、当然、そのためのオプションもいくつかあります。
http://www.gnu.org/software/tar/manual/html_node/transform.html
いくつかのパスセグメントを削除するだけの場合、--strip-components=n
またはそう--strip=n
することがよくあります。
tar xvzf tgz --strip=1
しかし、抽出されるファイルを正規表現で書き換えることも可能です(フラグは--transform
orで--xform
あり、modiferでeregを受け入れ/x
ます)。
tar xvzf tgz --xform='s#^[^/]+#.#x'
# or 's#^.+/##x' for discarding all paths
tarをリストするには、追加の--show-transformed
オプションが必要です。
tar tvzf tgz --show-transformed --strip=1 --xform='s/abc/xyz/x'
書き換えオプションは、抽出だけでなく、パッキングにも有効だと思います。しかしpax
、明らかにより良い構文を持っています。
s#.*/##
?
--strip
os x tarのマニュアルページには記載されていませんが、とにかく動作します、ありがとう!
--strip
あり--strip-components
ますか?
2つの手順でかなり簡単に行うことができます。必要に応じて調整します。
$ mkdir /tmp/dirtree
$ tar xfz /path/to/archive -C /tmp/dirtree
$ find /tmp/dirtree -type f -exec mv -i {} . \;
$ rm -rf /tmp/dirtree
find -exec mv -i
代わりに使用しfind | xargs
ます)....私のためにスクリプトを持ち歩くことなく、任意のシステムで繰り返すことができる簡単な手順。
tmpdir=$( mktemp -d )
一時ディレクトリを作成するときに便利です
何もインストールする必要のない可能なソリューション。
tar tvf
て、tarballからすべてのファイルを取得しますこれらのファイルを個別に抽出します-標準出力にtar抽出し、$ filenameにリダイレクトします
tar -tvf $1 | grep -v "^d" | \
awk '{for(i=6;i<NF+1;i++) {printf "%s ",$i};print ""}' |\
while read filename
do
tar -O -xf $1 "$filename" > `basename "$filename"`
done
extract.shとして保存し、として実行しextract.sh myfile.tar
ます。また、tarballから取得したディレクトリで検出された重複ファイル名を上書きします。
tar xf foo.tar.gz foo/path/to/file/bar.mp3 -O > bar.mp3
この-O
オプションは、ファイルを標準>
出力に抽出し、その出力をファイルにリダイレクトします。したがって、私の例では、foo.mp3を抽出し、bar.mp3にリダイレクトしています。ファイル名は任意です。