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

Wie verwenden Sie reguläre Ausdrücke mit dem cp-Befehl in Linux?

Nein.

Der cp Der Befehl besitzt nicht die Fähigkeit, seine Argumente als reguläre Ausdrücke zu verarbeiten. Sogar Platzhalter werden nicht behandelt (oder die meisten ausführbaren Dateien); vielmehr werden sie von der Shell gehandhabt.

cp test/* test2/ tatsächlich um bash erweitert wird, und all das cp wirklich sieht, denn seine Argumente sind cp test/file1 test/file2 test/file3 test2/ (oder was auch immer angemessen ist, basierend auf dem tatsächlichen Inhalt von test/ ).

Außerdem finde ich deinen Ausdruck nicht, [^\.php] , stimmt mit dem überein, was Sie wollen (es stimmt nicht nur mit Dateien überein, die .php enthalten ).

Wahrscheinlich möchten Sie sich die find ansehen Dienstprogramm, um eine Liste von Dateien basierend auf regulären Ausdrücken herauszufiltern, und verwenden Sie dann xargs um die zurückgegebene Dateiliste auf cp anzuwenden Befehl (vorausgesetzt, find hat keinen eingebauten Handler zum Kopieren von Dateien; ich bin mit dem Tool nicht genau vertraut).

Sie könnten Folgendes versuchen:

find . ! -iregex ".*\.php.*" -exec cp {} /destination/folder/ \;

Diese besagt, das aktuelle Verzeichnis rekursiv nach Dateien zu durchsuchen, die kein ".php" im Pfad enthalten und diese nach /destination/folder/ zu kopieren .

Wie gewünscht, eine genauere Aufschlüsselung der Argumente:

  • . - Ort, an dem die Suche gestartet werden soll – in diesem Fall das aktuelle Verzeichnis
  • ! - "Not"-Operator, invertiert das Ergebnis des nächsten Tests
  • -iregex - Groß-/Kleinschreibungstest für reguläre Ausdrücke. Das nächste Argument ist der Ausdruck.
  • ".*\.php.*" - Regulärer Ausdruck passend zu <Anything>.php<Anything> - Jede Datei, die irgendwo im Pfad ".php" enthält. (Beachten Sie, auch wenn Sie sich in einem Ordner befinden, der ".php" im Namen enthält, benötigen Sie einen komplexeren Ausdruck, um nur die Dateien abzugleichen)
  • -exec - Führen Sie einen Befehl aus, wenn die vorhergehenden Tests wahr zurückgeben. Das nächste Argument ist der Befehl, alle restlichen Argumente bis ; werden an den Befehl übergeben. die {} ist ein spezielles Argument, das den Dateinamen repräsentiert.
  • cp - Der Befehl find` sollte auf jedem der übereinstimmenden Pfadnamen ausgeführt werden.
  • {} - Der Pfad zur gefundenen Datei, übergeben an cp als Argument, damit es weiß, welche Datei kopiert werden soll
  • /destination/folder/ - Argument übergeben an cp , indem Sie cp sagen wohin es die Datei kopieren soll.
  • \; - Dies ist der ; Abschlusszeichen, dass -exec schaut nach. Wir entkommen ihm mit einem \ damit Ihre Shell nicht versucht, es zu analysieren, und es stattdessen als Argument an den Befehl (find )

Es ist ziemlich schwierig, einen regulären Ausdruck zu schreiben, der auf „Strings passt, die nicht .php haben ", also sagen wir stattdessen find um nach Zeichenfolgen zu suchen, die tun enthalten .php und invertieren Sie dann die Ergebnisse mit ! .


Sie können einige andere Tools von der Konsole aus verwenden, wie grep und xargs.

ls -1 some_folder | egrep 'some_extended_regex' | xargs cp -t destination_folder

Linux
  1. So verwenden Sie den Linux-Grep-Befehl

  2. So verwenden Sie den Verlaufsbefehl unter Linux

  3. Verwendung des su-Befehls unter Linux mit Beispielen

  4. So verwenden Sie den id-Befehl unter Linux

  5. So verwenden Sie den Befehl „screen“ unter Linux

So verwenden Sie den Linux-Ping-Befehl

So verwenden Sie den fd-Befehl auf einem Linux-System

Wie verwende ich den wget-Befehl unter Linux?

Wie verwende ich den xargs-Befehl unter Linux?

So verwenden Sie den RPM-Befehl unter Linux

So verwenden Sie den which-Befehl in Linux