Komprimieren Sie alle nicht komprimierten Dateien in einem Ordner in einer Zeile

2

Ich habe viele Textdateien, die ich komprimieren möchte. Jede Datei muss separat komprimiert werden. Einige von ihnen sind jedoch bereits komprimiert.

Wie komprimiere ich in einer Zeile alle Dateien, die mit enden, .txtindem ich .zipan ihren Namen anhänge ?

Ich weiß, in Bash kann ich, aber ich weiß nicht wie.

  • find /path/to/files -name "*.txt" listet mir diese Dateien auf
  • zip fname.txt.zip fname.txt komprimiert die Datei
  • rm fname.txt Entfernt die Originaldatei

Wie richte ich diese in einer Zeile ein? Ich habe wenig Verständnis dafür, was xargsich in diesen Fällen häufig sehe

usr-local-ΕΨΗΕΛΩΝ
quelle

Antworten:

3

Obwohl dies mit einem Pipe-Befehl möglich ist, kann find dies von sich aus tun:

find /path/to/files -name '*.txt' -exec zip '{}.zip' '{}' ';' -exec rm '{}' ';'

Wie Sie sich vielleicht vorstellen können, führt -exec den Befehl aus, der durch ein Semikolon (das in Anführungszeichen oder durch einen Backslash vor der Shell verborgen ist) beendet wird, und {} bedeutet den Namen der aktuell gefundenen und verarbeiteten Datei (und ist auch vor der Shell verborgen).

Gombai Sándor
quelle
0

Ich holte Luft und ... zwei Befehle

  • find . | grep -i '\.txt$' | xargs -I {} zip {}.zip {}
  • find . | grep -i '\.txt$' | xargs -I {} rm {}
usr-local-ΕΨΗΕΛΩΝ
quelle