1. ホーム
  2. linux

[解決済み] フォルダ構造のないファイルをtarで展開する方法

2023-05-19 23:50:58

質問

以下のような構造のtar.gzファイルがあります。

folder1/img.gif
folder2/img2.gif
folder3/img3.gif

画像ファイルをフォルダ階層を無視して抽出したいので、抽出結果は以下のようになります。

/img.gif
/img2.gif
/img3.gif

私はUnixとPHPの組み合わせでこれを行う必要があります。これは、指定されたディレクトリにそれらを抽出するために動作しますが、フォルダの階層を保持するために、私がこれまでに持っているものです。

exec('gtar --keep-newer-files -xzf images.tgz -C /home/user/public_html/images/',$ret);

どのように解決するのですか?

この場合 --strip-components という tar のオプションがあります。

 --strip-components count
         (x mode only) Remove the specified number of leading path ele-
         ments.  Pathnames with fewer elements will be silently skipped.
         Note that the pathname is edited after checking inclusion/exclu-
         sion patterns but before security checks.

あなたと似たような構造のtarファイルを作成します。

$tar -tf tarfolder.tar
tarfolder/
tarfolder/file.a
tarfolder/file.b

$ls -la file.*
ls: file.*: No such file or directory

次に、することによって抽出される。

$tar -xf tarfolder.tar --strip-components 1
$ls -la file.*
-rw-r--r--  1 ericgorr  wheel  0 Jan 12 12:33 file.a
-rw-r--r--  1 ericgorr  wheel  0 Jan 12 12:33 file.b