tarコマンド-シンボリックリンクをスキップ


13

私はtarコマンドを次のように使用します。

tar -cvf protTests.tar protTests/*

tarフォルダ内のすべてのファイル、protTests。ただし、これにはフォルダー内のシンボリックリンクが含まれていますが、これは望ましいものではありません。

すべてのシンボリックリンクを除外するコマンドラインオプションはありますか?

回答:


11

これを行う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

1
Tarにはオプションがありません--files-from。これはgtarからのオプションです。そのため、そのようなアドバイスをしてください。これはgtar固有であることをよりよく説明してください。Findにはプライマリがありません-not。これは別の移植性のないGNUismです。一般に、個別の検索呼び出しを使用することはお勧めできません。これにより、ファイル名に変な文字が含まれる問題が発生する可能性があり、findとtarの両方がファイルシステムをスキャンする必要があるため、パフォーマンスが低下します。これらの問題は、libfindを使用するstarのようなプログラムには適用されないため、findコードが組み込まれています。
schily 2015

もう1つの一般的なヒントを追加しましょう。UNIXプログラムのベンダー固有のバリアントに固有のアドバイスをするときは、ベンダーを言及し、ベンダー固有であることをお勧めします。これは通常、ソフトウェアの公式名を使用して行うことができます。たとえば、tarの代わりにgtar、viの代わりにvimを使用します。これはUNIX関連の情報プラットフォームであるため、一般的な例ではPOSIX標準に合わせる必要があります。
schily

そうです、@ schily、これはGNU固有のソリューションです。に基づくあなたの答えstarは良い選択肢であり、私はその理由でそれを支持しました。「おかしなキャラクター」の反対にも同意しますが、GNUにtar-0オプションがないため、トレードオフです。パフォーマンスの異議に同意しませ。これは、この状況では実際には重要ではありません。
Celada、2015

2
@schily、GNU両方tarとはbsdtar持っている--files-from--null(と組み合わせた場合に変な文字の問題を除去するfind-print0-exec printf '%s\0' {} +)。しかし、ここでは、おそらく--no-recursionオプションを追加する必要があります。一部のpax実装には-0オプションもあります。
ステファンChazelas

2
@schily私は、このコメントスレッドがの異なるバージョンの擁護の場ではないと感じていますtarチャットにお持ちください。それはすでに長すぎて、宗教戦争のように読んでいます。この時点でOPが鳴らない限り、tar使用しているのバージョンが問題になるとは思いません。彼らが使っているUnixの種類すら知らない。
Celada、2015

-2

私のtar実装は最良の方法です

star -cv -f out.tar -find protTests ! -type l

8
zsh: command not found: star読者の99%以上がシステムにないことを知っているユーティリティについて言及するときは、それらをどこで入手できるか説明してください。また、自分の製品について言及するときは、所属を開示する必要があります(リンクを投稿するかどうかにかかわらず、リンクを投稿することをお勧めします)。
Gilles 'SO-邪悪なことをやめ

最近の典型的なLinuxシステムでは、デフォルトのインストール後に多くの重要なソフトウェアがインストールされておらず、同時に多くの不要なソフトウェアがインストールされています。Linuxユーザーは、不足しているソフトウェアのインストール方法を知っている必要があり、tarを頻繁に使用するユーザーは、通常、とにかくstarをインストールしています。
schily

8
タールを頻繁に使用する大多数の人々は、スターは言うまでもなく、paxについて聞いたことがない。
Gilles 'SO-邪悪なことをやめなさい'

まあ、彼らが "tar"と呼ぶときにLinuxでgtarを使用していることを知らない人は、おそらくとにかく気にする人ではないでしょう。Starは最も古い無料のtar実装であり、さまざまなtar実装で見られる多くの機能はstarから取られているので、オリジナルについて話してみませんか?
schily
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.