ベストアンサー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')"