17

基本的にこれを行うシェルスクリプトが必要です:

  • フォルダー内ですべての txt ファイルを検索し、見つかったそれぞれのファイルに対して、見つかった txt ファイルと同じファイル + .zip を含む個別の zip ファイルを作成します。
  • その後、作成したzipファイルをtxtファイルに移動します。

基本的には、txt ファイルのリストを zip に相当するものに置き換えますが、同じ名前を維持するスクリプトです。

zip するファイルを見つけるために find を使用しました。

find . -name '.txt.' -print

結果は次のとおりです。

./InstructionManager.txt.0
./InstructionManager.txt.1

これらは、個別に圧縮したいファイルです (もちろん、もっと多くなります) が、次のような make コマンドの引数として個別に使用する方法がわかりません。

zip ./InstructionManager.txt.0.zip ./InstructionManager.txt.0
mv ./InstructionManager.txt.0.zip ./InstructionManager.txt.0
zip ./InstructionManager.txt.1.zip ./InstructionManager.txt.1
mv ./InstructionManager.txt.1.zip ./InstructionManager.txt.1

何か案は?いいえ、すべてのファイルを含む zip は必要ありません :S ありがとう

4

4 に答える 4

29
find . -name '*.txt.*' -print -exec zip '{}'.zip '{}' \; -exec mv '{}'.zip '{}' \;
  • .txtファイルを探す
  • 最初-execにファイルを圧縮します
  • 2 番目-execは、圧縮されたファイルの名前を元の名前に変更します

この手順では、元のファイルが上書きされることに注意してください。新しいファイルが実際の zip ファイルであることを確認するには、次のようにします。

file InstructionManager.txt.*

どちらが返されますか:

InstructionManager.txt.0: Zip archive data, at least v1.0 to extract
InstructionManager.txt.1: Zip archive data, at least v1.0 to extract
于 2012-09-07T16:47:32.800 に答える
12

検索と zip の使用:

find . -name '*.txt.*' -exec zip '{}.zip' '{}' \;
于 2012-09-07T16:45:55.493 に答える
1

findxargsスペースを含むファイル名を使用できます。

find . -name '*.txt.*' -print0 | xargs -0 -r -n1 -I % sh -c '{ zip %.zip %; mv %.zip %;}'

ファイルは圧縮され、元の名前に名前が変更されます

于 2012-09-07T17:12:24.893 に答える
0

すべてを個別に圧縮した後に元のファイルを削除する場合は、次のコマンドを使用できます。

$ find . -name '*.txt.*' -print -exec zip '{}'.zip '{}' \; -exec rm '{}' \;
于 2021-09-10T15:34:24.963 に答える