3

次のコマンドを使用して、フォルダー内の各ファイルを個別に圧縮します。

for file in *; do gzip "$file"; done

ただし、元のファイルは保持されます。ファイルが正常に gzip された後、ファイルを自動的に削除する方法があるかどうかを知りたいです。

ありがとう。

4

3 に答える 3

5

私はあなたが抱えている問題を理解していません。gzipのmanページによると:

可能な場合は常に、同じ所有権モード、アクセス、および変更時間を維持しながら、各ファイルを拡張子.gzのファイルに置き換えます。

私の唯一の推測は、あなたが許可の問題を抱えているということです。gzipするファイルの所有者としてログインしていることを確認してください。ただし、私のマシンのgzipバージョンでは、自分Operation not permittedが所有していないファイルをgzipしようとすると、明らかな警告が表示されます。操作は引き続き成功しますが、何が起こっているのかは明らかです。

于 2012-04-28T13:13:09.280 に答える
3

考えられる原因については、@TimPoteに+1してください。

ただし、ファイルを処理するときはループに注意forしてください。ファイル名に埋め込みスペースが含まれている場合、2つの別個のファイル名として扱われます。find次のように使用することで、これを回避できます。

find . -maxdepth 1 -type f ! -name '*.gz' -exec gzip "{}" \;

これにより、現在のディレクトリでまだ圧縮されていないすべての通常のファイルが検索され、gzipそれぞれが個別に呼び出されます。中括弧({})はファイル名に置き換えられ、引用符はスペースが適切に処理されることを保証します。

于 2012-04-28T13:53:55.243 に答える
0

数千のファイルがある場合、「引数リストが長すぎます」というエラーを防ぐために使用します

find . -maxdepth 1 -type f ! -name '*.gz' | while read file; do
    gzip "$file"
done
于 2016-03-10T14:27:33.433 に答える