「tar」を解凍しますが、抽出するディレクトリ名を変更します


26
tar -tf filename.tar
folder1/file
folder1/name
[...]

私は、抽出したいファイル名前を、にフォルダ2。これはワンライナーとして実行できますか?

回答:


35

-Candを使用します--strip-components(を参照man tar)。

例:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz - -C FOLDER --strip-components=1

# for local tar file
tar -xzf FILENAME -C FOLDER --strip-components=1

説明:

この-Cフラグは、ディレクトリがすでに配置されていることを前提としているため、tarファイルの内容をそこに展開できます。したがってmkdir FOLDER

この--strip-componentsフラグは、tarファイルが自然にフォルダーに展開するときに使用されrepo-name-masterます。たとえば、githubのようにフォルダーに展開する場合などです。もちろん、ここで生成された最初のレベルのフォルダーは必要ないので、に--strip-components設定する1と、その最初のフォルダーが自動的に削除されます。数値が大きいほど、ネストされたフォルダが深く削除されます。


私が読んでman tar。見つけられませんでした--strip-components。良いもの
フェリペアルバレス

1
tar-1.14は--strip-pathを使用し、tar-1.14.90 +は--strip-componentsを使用します。ここに問題があるのでしょうか?
ミハイルモスカレフ

オンラインマニュアルには、3つの引数スタイルが混乱を引き起こすため、スイッチだけでなく例を示した場合、これを支持します。
イアン

tar -xzで-fを忘れてしまったと思います。私のために失敗しました。私は...私は理由もなくこのすべての時間をことを使用して思った
ジョンCarrell

17

この--transformオプションを使用して、もう少し柔軟性を高めることもできます。sed replacement(s)操作を受け入れます。

たとえば、これはLinuxのtarballを新しいディレクトリに抽出し、パッチを適用できるようにする方法です。

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.