私はtarコマンドを次のように使用します。
tar -cvf protTests.tar protTests/*
tar
フォルダ内のすべてのファイル、protTests
。ただし、これにはフォルダー内のシンボリックリンクが含まれていますが、これは望ましいものではありません。
すべてのシンボリックリンクを除外するコマンドラインオプションはありますか?
私はtarコマンドを次のように使用します。
tar -cvf protTests.tar protTests/*
tar
フォルダ内のすべてのファイル、protTests
。ただし、これにはフォルダー内のシンボリックリンクが含まれていますが、これは望ましいものではありません。
すべてのシンボリックリンクを除外するコマンドラインオプションはありますか?
回答:
これを行うtar
と、protTests
シンボリックリンクであるファイルを除いて、内部のすべてのファイルのリストを提供できます。
find protTests -maxdepth 1 -mindepth 1 -not -type l -print0 |
tar --null --files-from - -cvf protTests.tar
ちなみに、既存のコマンド:
tar -cvf protTests.tar protTests/*
ですべてのファイルをprotTests
アーカイブするのではなく、名前が.
(非表示ではない)で始まらないファイルのみをアーカイブします。*
グロブ演算子はで始まる名前のファイルをスキップ.
設計では。このコマンドには、protTests
ファイルが多数(数千を超える)の場合、protTests/*
引数が多すぎてコマンドラインに収まらない場合があるという問題もあります。
次のような簡単なコマンドでは、これらの問題は発生しません。
tar -cvf protTests.tar protTests
star
は良い選択肢であり、私はその理由でそれを支持しました。「おかしなキャラクター」の反対にも同意しますが、GNUにtar
は-0
オプションがないため、トレードオフです。パフォーマンスの異議には同意しません。これは、この状況では実際には重要ではありません。
tar
とはbsdtar
持っている--files-from
と--null
(と組み合わせた場合に変な文字の問題を除去するfind
の-print0
か-exec printf '%s\0' {} +
)。しかし、ここでは、おそらく--no-recursion
オプションを追加する必要があります。一部のpax
実装には-0
オプションもあります。
tar
。チャットにお持ちください。それはすでに長すぎて、宗教戦争のように読んでいます。この時点でOPが鳴らない限り、tar
使用しているのバージョンが問題になるとは思いません。彼らが使っているUnixの種類すら知らない。
私のtar実装は最良の方法です
star -cv -f out.tar -find protTests ! -type l
zsh: command not found: star
読者の99%以上がシステムにないことを知っているユーティリティについて言及するときは、それらをどこで入手できるか説明してください。また、自分の製品について言及するときは、所属を開示する必要があります(リンクを投稿するかどうかにかかわらず、リンクを投稿することをお勧めします)。
--files-from
。これはgtarからのオプションです。そのため、そのようなアドバイスをしてください。これはgtar固有であることをよりよく説明してください。Findにはプライマリがありません-not
。これは別の移植性のないGNUismです。一般に、個別の検索呼び出しを使用することはお勧めできません。これにより、ファイル名に変な文字が含まれる問題が発生する可能性があり、findとtarの両方がファイルシステムをスキャンする必要があるため、パフォーマンスが低下します。これらの問題は、libfindを使用するstarのようなプログラムには適用されないため、findコードが組み込まれています。