データを実行して収集し、このデータを別のスクリプトに供給するいくつかのスクリプトがあります。したがって、チェーン全体が自動化されます。自動化プロセスのある時点では、すべてのデータファイルがパッケージ化され、処理のために転送されます。私が使用するコマンドは次のとおりです。
tar -zchvf "$target_dir" -C "$data_dir" .
ここで target_dir は私の tarball の位置、 data_dir は私のデータの位置です。
今すべてがうまくいきますが、私のTarbolのファイルは次のようになります。
./file1
./file2
<etc>
後処理スクリプトは、これらのファイルの前の./のために混乱します。次のようになると予想されます。
file1
file2
<etc>
マニュアルページを見てみましたが、tarプロセスから先行する./を削除することについて本当に印象的ではありません。私が考えていることの1つは、スクリプトを次のように変更することです。
cd $data_dir; tar -zchvf "$target" *; cd -
しかし、これは私にとって非常に間違った感じで、私は他の愚かなものを見逃していると確信しています。
参考のためにbash v3.2.5を使用しています。
答え1
gnu tarを使用している場合は、tarを入力しながらファイル名を編集できます。
$ mkdir -p a/b
$ cd a
$ tar cf - --transform='s:^./::' . | tar tvf -
drwxr-xr-x 0 2018-07-24 18:18 ./
drwxr-xr-x 0 2018-07-24 18:18 b/
答え2
tar 1.15.1
2004-12-21に掲載された の文書を読むhttps://www.gnu.org/software/tar/ダウンロードリンクとインクルードは以下をtar.info
保証します。
6.3 ファイルから名前を読む
[...]--files-from=FILE NAME' `-T FILE NAME' FILE NAME ファイルから抽出または生成する名前を取得します。
""のファイル名にダッシュを渡すと
--files-from
(つまり、"--files-from=-
"または"-T -
"指定)、ファイル名が標準入力から読み込まれます。
今2003-04-02 ls
(coreutils
coreutil.info
coreutils-5.0
https://ftp.gnu.org/gnu/coreutils/)、以下より前tar 1.15.1
:
'
-A
'
'は、''と''を除くディレクトリ内のすべてのファイルを一覧表示します--almost-all
。.
..
したがって、これは期待どおりに機能する必要があります(大括弧のペアは忘れてしまうために存在するため、これを実行したり関係なくすることがcd
できます)。cd -
( cd "$data_dir" && ls -A | tar -zchvf "$target_file" -T - )