ディレクトリ構造のないTarファイルのリスト

ディレクトリ構造のないTarファイルのリスト

私がこれをやっているとしましょう:

tar cvf allfiles.tar $(<mylist.txt)

そして私のリスト.txt以下が含まれます:

/tmp/lib1
/tmp/path2/lib2
/path3/lib3

tarballにのみ含まれるようにファイルを圧縮する方法

lib1
lib2
lib3

ディレクトリ構造はまったくありませんか?


一般的に推奨される-Cオプション(--directory引用する引用する)が、ディレクトリが複数あるため動作しません。また、--xform固定パターンが必要なようです(引用する)私たちはありません。

ベストアンサー1

このパラメータは非常に強力な代替式を--xform好きなだけ取ります。sedあなたの場合は、最後まですべてと一致するパターンを使用して/から、何でも変更してください。

tar cvf allfiles.tar --xform='s|.*/||' $(<mylist.txt)

--show-transformed-names新しい名前を見るには追加してください。

この置換は、コマンドラインで指定されたファイル名だけでなく、すべてのファイル名にも適用されます。したがって、たとえばファイルが1つあり、/a/b/cリストにのみ指定されている場合、/a最終ファイル名はthatcではなくthatですb/c。あなたの場合のように、いつでもより明確で正確な代替リストを提供できます。

--xform='s|^tmp/path2/||;s|^tmp/||;s|^path3/||'

最初の文字は/tarによって削除されるため(tarを使用しない限り-P)、上記の式ではその文字が失われます。また、最長の一致が最初に実行されるようにディレクトリのリストを並べ替える必要があります。それ以外の場合は削除されたtmp/path2/ため、一致はありません。tmp/ただし、次のようにこのリストを自動的に作成できます。

--xform="$(sed <mylist.txt 's|[^/]*$||; s|^/||; s:.*:s|^&||;:' | sort | tr -d '\n')"

おすすめ記事