GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwendung von find und tar mit Dateien mit Sonderzeichen im Namen

Verwenden Sie den -T Funktion von tar, um es anzuweisen, die Liste der Dateien aus einer anderen Datei zu lesen (tar behandelt jede Zeile als separate Datei).

Sie können dann <() verwenden Notation, damit Ihre Shell eine Pseudodatei aus der Ausgabe eines Befehls generiert:

tar cf ctlfiles.tar -T <(find /home/db -name "*.ctl")

Wenn Ihre Shell <() nicht unterstützt Notation können Sie eine temporäre Datei verwenden:

find /home/db -name "*.ctl" > ctlfile-list
tar cf ctlfiles.tar -T ctlfile-list
rm ctlfile-list

Sie können die Funktion -print0 von find mit der Funktion -0 von xargs wie folgt verwenden:

find /home/db -name '*.ctl' -print0 | xargs -0 tar -cf ctlfiles.tar

-print0 (das ist Bindestrich-Druck-Null) weist find an, eine Null als Trennzeichen zwischen Pfaden anstelle von Leerzeichen zu verwenden, und -0 (das ist Bindestrich-Null) weist xargs an, dasselbe zu erwarten.

Hinzufügen bearbeitet:

Wenn Sie eine große Anzahl von Dateien haben, kann xargs tar mehr als einmal aufrufen. Sehen Sie sich die Kommentare an, um damit umzugehen, oder lassen Sie find tar direkt aufrufen, so wie hier, was mit einer beliebigen Anzahl von Dateien funktioniert, selbst wenn sie Leerzeichen oder Zeilenumbrüche in ihren Namen haben:

rm -f ctlfiles.tar
find /home/db -name '*.ctl' -exec tar -rf ctlfiles.tar {} +

Wenn das Argument nach "-T" "-" ist, wird die Liste der Dateien von stdin übernommen. Neuere Versionen von tar unterstützen normalerweise die Option "-null", die angibt, dass die Dateien, die in der Quelle angegeben sind, die durch "-T " Option sind durch Nullen getrennt.

Daher funktioniert Folgendes mit einer beliebigen Anzahl von Dateien, die möglicherweise Zeilenumbrüche enthalten:

find /home/db -name '*.ctl' -print0 | tar --null -T - -cf ctlfiles.tar

Linux
  1. Finden Sie die größten Dateien und Verzeichnisse in Linux

  2. Sed mit Sonderzeichen verwenden?

  3. Wie komprimiert und extrahiert man Dateien mit dem tar-Befehl unter Linux?

  4. Suchen und kopieren Sie Dateien

  5. Dateien finden und taren (mit Leerzeichen)

So finden Sie Dateien in Linux mit dem Find-Befehl

So finden Sie Dateien über die Befehlszeile im Linux-Terminal

So finden Sie Dateien mit dem fd-Befehl in Linux

Verwenden des tr-Befehls in Linux, um mit Charakteren zu spielen

Wie benenne ich alle Dateien mit Sonderzeichen und Leerzeichen in einem Verzeichnis um?

Suchen und Löschen von Dateien mit einem bestimmten Datum