Tarリモートディレクトリ、ファイルの前に./がありません。

Tarリモートディレクトリ、ファイルの前に./がありません。

データを実行して収集し、このデータを別のスクリプトに供給するいくつかのスクリプトがあります。したがって、チェーン全体が自動化されます。自動化プロセスのある時点では、すべてのデータファイルがパッケージ化され、処理のために転送されます。私が使用するコマンドは次のとおりです。

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.12004-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 lscoreutilscoreutil.infocoreutils-5.0https://ftp.gnu.org/gnu/coreutils/)、以下より前tar 1.15.1

' -A'
'は、''と''を除くディレクトリ内のすべてのファイルを一覧表示します--almost-all
...

したがって、これは期待どおりに機能する必要があります(大括弧のペアは忘れてしまうために存在するため、これを実行したり関係なくすることがcdできます)。cd -

( cd "$data_dir" && ls -A | tar -zchvf "$target_file" -T - ) 

関連情報