GNU/Linux >> Linux Esercitazione >  >> Linux

Come si usano le espressioni regolari con il comando cp in Linux?

No.

Il cp Il comando non possiede la capacità di elaborare nessuno dei suoi argomenti come espressioni regolari. Anche i caratteri jolly non vengono gestiti da esso (o dalla maggior parte degli eseguibili); piuttosto sono gestiti dalla shell.

cp test/* test2/ è in realtà espanso da bash e tutto ciò cp vede davvero perché i suoi argomenti sono cp test/file1 test/file2 test/file3 test2/ (o qualunque cosa sia appropriata in base ai contenuti effettivi di test/ ).

Inoltre, non credo che la tua espressione, [^\.php] , corrisponderà a ciò che desideri (non corrisponde solo ai file che contengono .php ).

Probabilmente vorrai esaminare il find utility per filtrare un elenco di file in base all'espressione regolare, quindi utilizzare xargs per applicare l'elenco dei file restituiti al cp comando (presumendo che find non abbia un gestore integrato per la copia dei file; non ho familiarità con lo strumento).

Potresti provare:

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

Questo dice di cercare ricorsivamente nella directory corrente i file che non contengono ".php" nel percorso e copiarli in /destination/folder/ .

Come richiesto, una ripartizione più specifica degli argomenti:

  • . - Posizione per iniziare la ricerca - in questo caso, la directory corrente
  • ! - Operatore "Not", inverte il risultato del test successivo
  • -iregex - Test delle espressioni regolari senza distinzione tra maiuscole e minuscole. L'argomento successivo è l'espressione.
  • ".*\.php.*" - Espressione regolare corrispondente a <Anything>.php<Anything> - Qualsiasi file che ha ".php" da qualche parte nel percorso. (Nota, anche all'interno di una cartella che contiene ".php" nel nome, avresti bisogno di un'espressione più complessa per abbinare solo i file)
  • -exec - Esegue un comando se i test precedenti restituiscono true. L'argomento successivo è il comando, tutti gli argomenti rimanenti fino a ; vengono passati al comando. il {} è un argomento speciale che rappresenta il nome del file.
  • cp - Il comando che find` dovrebbe essere eseguito su ciascuno dei nomi di percorso corrispondenti.
  • {} - Il percorso del file che è stato trovato, passato a cp come argomento in modo che sappia quale file copiare
  • /destination/folder/ - argomento passato a cp , dicendo a cp dove dovrebbe copiare il file.
  • \; - Questo è il ; terminatore che -exec sta cercando. Lo evadiamo con un \ in modo che la tua shell non tenti di analizzarlo e invece lo fornisca come argomento al comando (find )

È piuttosto difficile scrivere un'espressione regolare che corrisponda a "stringhe che non hanno .php ", quindi diciamo invece a find per cercare stringhe che fanno contenere .php e quindi invertire i risultati con ! .


Puoi utilizzare pochi altri strumenti dalla console, come grep e xargs.

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

Linux
  1. Come usare il comando Linux grep

  2. Come usare il comando cronologia in Linux

  3. Come utilizzare il comando su in Linux con esempi

  4. Come utilizzare il comando id in Linux

  5. Come utilizzare il comando "schermo" in Linux

Come utilizzare il comando Ping di Linux

Come utilizzare il comando fd sul sistema Linux

Come utilizzare il comando wget in Linux?

Come usare il comando xargs in Linux?

Come utilizzare il comando RPM in Linux

Come utilizzare il comando which in Linux