GNU/Linux >> Linux の 問題 >  >> Linux

シェルが 1 行で展開するにはファイル名が多すぎる場合、圧縮された tar を作成するにはどうすればよいですか?

堅牢なソリューションとして、find を使用してください ファイル名をヌル文字で区切り、直接 tar にパイプします 、null で区切られた入力を読み取ります:

find . -maxdepth 1 -name '*.csv' -print0 |
tar -czf archive.tgz --null -T -

これですべてが処理されます ファイル名が正しく、ファイル数による制限もありません。

ls の使用 別のプログラムによって解析されるファイル名のリストを生成することは、可能な限り避けるべき一般的なアンチパターンです。 find null 区切りの出力を生成できます (-print0 )ほとんどのユーティリティがさらに読み取りまたは解析できます。 null 文字はファイル名に表示できない唯一の文字であるため (および / 、明らかに)、これでいつでも安全です。


いいえ、圧縮された tar ファイルを解凍せずに追加することはできません。

ただし、tar はファイルから処理するファイルのリストを受け入れることができるため、次のようにするだけです:

ls *.csv > temp.txt
tar -zcf ball.tgz -T temp.txt

@slhck は、ファイル名にスペース (およびおそらく他の厄介な文字) がある場合、上記の解決策が機能しないことを指摘しています。このバージョンでは、各ファイル名を二重引用符で囲みます:

ls *.csv | sed -e 's/^\(.*\)$/"\1"/' > temp.txt
tar -zcf ball.tgz -T temp.txt

(もちろん、ファイル名に二重引用符が含まれている場合、これは壊れます。その場合、当然の結果が得られます。:)


Linux
  1. Linux の引数が多すぎる制限を回避する方法

  2. コマンドラインで gz 圧縮ファイルの最後の行を出力するには?

  3. シングル ユーザー モードで 2 番目のシェルを起動するにはどうすればよいですか?

  1. sudoにパスワードを長く覚えさせる方法

  2. [Linux]:「tar」シェルコマンドを使用するときにディレクトリを除外する方法

  3. シェルスクリプトの変数の命名規則はありますか?

  1. シェルで制御文字(^ c、^ d、^ [、…)を異なる方法で表示する方法は?

  2. Gnome Shellアクティビティバーを常に小さくするにはどうすればよいですか?

  3. 複数のファイル/ディレクトリがある場合にターミナルをオートコンプリートするにはどうすればよいですか?