it-swarm.com.de

Wie sammle ich alle "txt" - und "log" -Dateien mit find?

Ich habe derzeit dieses Skript:

find . -iname '*.log' -print0 | xargs -0 tar zcf $file

So sammeln Sie alle "* .log" -Dateien aus einem bestimmten Verzeichnis. Ich möchte es ändern, um auch alle ".txt" -Dateien einzuschließen, aber ich weiß nicht wie, das sollte ziemlich einfach sein, oder?

5
OscarRyz

Sie sind auf dem richtigen Weg. Versuche dies:

find . \( -iname "*.log" -or -iname "*.txt" \) -print0 | xargs -0 tar zcf $file

2
Raphael Bossek

Dies entspricht fast der Antwort von Raphael B., es wird jedoch auch die maximale Länge der Argumente überschritten. Wir tun dies, indem wir tar einfach anweisen, die zu archivierenden Dateinamen von stdin (wo es keine Begrenzung gibt) zu lesen, anstatt sie als Argumente zu erwarten:

find . \( -iname "*.log" -o -iname "*.txt" \) -print0 | tar --null --files-from=- -zcf "$file"

Beachten Sie, dass dies GNU spezifisch ist. Tar auf anderen UNIX- oder UNIX-ähnlichen Systemen versteht --null, aber der Teer in Ubuntu ist GNU tar, also wird es dort gut funktionieren.

4
geirha

Hier ist die Antwort auf die nutzlose Verwendung von xargs:

find \( -name "*.log" -or -name "*.txt" \) -exec tar zcf archiv2 {} + 

Ich habe es nicht für viele Dateien getestet - würde mich über einen Kommentar und eine Nummer freuen, bei der es fehlschlägt.

Das Pseudoargument, an das Sie sich erinnern müssen, um das -delete als letztes zu platzieren: Nun ja, Sie müssen sich auch daran erinnern, | zu setzen xargs ... als letztes, nicht wahr?

2
user unknown
find . -regextype posix-extended -iregex '.*\.(log|txt)' -print0 | xargs -0 tar zcf $file

Sie können die '.*\.(log|txt)' durch einen beliebigen POSIX Extended regulären Ausdruck ersetzen.

Das Beispiel stimmt überein mit:

Beliebige Anzahl beliebiger Zeichen

dann ein '.'

dann 'log' oder 'txt'

1
dv3500ea

Was ist mit diesem sehr einfachen Ansatz:

find -iname '*.txt'; find -iname '*.log'
1
Ralf Hersel