200,000を超えるファイルを含むフォルダがあります。特定の名前で始まるファイルだけを保持したい(ファイル名が非常に大きい)。はいsudo find /path/to/_Logs -name "RATE*" -print0 | xargs -0 tar -czf logs_rate.tgz
。
ただし、時には次のメッセージが表示されます。tar: メンバー名から先行する "/" を削除そして保存はゼロにリセットされ、再開されます。その過程を終えてから、合計22,000個のファイルのうち25個程度のファイルしか残っていませんでした。私は何を逃したか、何が間違っていますか?
答え1
コメントからすでに分かるように、何度もtar
実行するだけですxargs
。この問題を解決する最も明白な方法は、アーカイブを最初から再作成するのではなく、ファイルをアーカイブに追加することです。
sudo find /path/to/_Logs -name "RATE*" -print0 | xargs -0 tar -rf logs_rate.tar
その後、圧縮します。
リーダーシップに関する言葉は/
単なる警告です。
答え2
解決策が見つかりました。長い名前と大きなコンテンツをバイパスするには、コマンドを2つの部分に分割します。
sudo find /path/to/_Logs -name "RATE*" > test1.txt
tar -czvT test1.txt -f logs.tgz
答え3
tarでxargsを使用しないでください。これを行う必要はありません。
Gnu / tar(そして他のtarにもあると思います)には、サイドファイルからファイル名を無制限に読むことができるオプション-T
(長い形式:)があります。--files-from
(また、を使用してstdin経由で送信することもできます-T -
。)
この--null
オプションを使用すると、-T
リストに次のようなxargs
null で終わる文字列 (同じ理由で) を含めることができます。
-T
いくつかのオプションがあります。で始まるパス名に注意してください-
。-T
-C