Archivieren mit Ignorieren von Dateien, die größer als 100 MB sind

7

Ich versuche, Dateien mit tar zu archivieren und Dateien zu ignorieren, die größer als 100 MB sind. Ist das möglich?
PS: Ich muss keinen Teer verwenden.

Faruk Uzun
quelle

Antworten:

8

Ja, es gibt wahrscheinlich noch ein paar Möglichkeiten, dies zu tun, aber Sie sind wahrscheinlich am besten dran, findda es so einstellbar ist.

find /path/to/dir -size -100M | xargs tar cvf archive.tar

oder

tar cvf archive.tar $(find /path/to/dir -size -100M)

Wenn der aktuelle Ordner andere Verzeichnisse enthält, die Sie nicht archivieren möchten, verwenden Sie:

find /path/to/dir -maxdepth 1 -size -100M | xargs tar cvf archive.tar

Gemäß den Kommentaren unten können Leerzeichen einige Fehler auslösen, aber bei meinen Tests schienen sie bei Verwendung der ersten Methode (an sich etwas seltsam) immer noch zum Archiv hinzugefügt zu werden. Wenn Sie sich jedoch Sorgen machen, können Sie den Befehl find auf korrigieren Ersetzen Sie Leerzeichen durch maskierte Versionen.

Wie immer gibt es eine Milliarde Möglichkeiten, dies zu tun.

find /path/ -size -100M | sed 's/ /\\ /g' | xargs tar cvf archive.tar

find /path/ -size -100M -exec echo '"{}"' \; | xargs tar cvf archive.tar
Oli
quelle
2
Beide Optionen können Probleme verursachen, wenn das OP Dateinamen enthält, die Leerzeichen enthalten.
Enzotib
... vereinbart - muss sowohl -print0im Befehl find als auch im --nullBefehl tar verwendet werden, um mit diesem Szenario fertig zu werden.
Fossfreiheit
Das Erstellen eines riesigen Archivierungsbefehls tar cvf myfile.tarschlägt fehl. Ich empfehle dringend, tar rvf myfile.tarBefehl zu verwenden.
Faruk Uzun
0

Schließen Sie einfach die großen Dateien wie folgt aus:

tar cf archive.tar / path / to / archive --exclude-from <(find / path / to / archive -size + 100M)

eshwar
quelle