GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser les expressions régulières avec la commande cp sous Linux ?

Non.

Le cp La commande ne possède pas la capacité de traiter l'un de ses arguments comme des expressions régulières. Même les caractères génériques ne sont pas gérés par lui (ou la plupart des exécutables) ; ils sont plutôt gérés par le shell.

cp test/* test2/ est en fait développé par bash, et tout ça cp voit vraiment pour ses arguments sont cp test/file1 test/file2 test/file3 test2/ (ou tout ce qui est approprié en fonction du contenu réel de test/ ).

De plus, je ne pense pas que votre expression, [^\.php] , correspondra à ce que vous voulez (il ne correspond pas uniquement aux fichiers contenant .php ).

Vous voulez probablement vous pencher sur le find utilitaire pour filtrer une liste de fichiers basée sur une expression régulière, puis utiliser xargs pour appliquer la liste de fichiers retournée au cp commande (en supposant que find n'a pas de gestionnaire intégré pour copier des fichiers ; je ne connais pas intimement l'outil).

Vous pouvez essayer :

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

Cela dit de rechercher récursivement dans le répertoire courant les fichiers qui ne contiennent pas ".php" dans le chemin et de les copier dans /destination/folder/ .

Comme demandé, une répartition plus précise des arguments :

  • . - Emplacement pour démarrer la recherche - dans ce cas, le répertoire courant
  • ! - Opérateur "Non", inverse le résultat du prochain test
  • -iregex - Test d'expression régulière insensible à la casse. L'argument suivant est l'expression.
  • ".*\.php.*" - Expression régulière correspondant à <Anything>.php<Anything> - Tout fichier contenant ".php" quelque part dans le chemin. (Remarque, y compris dans un dossier contenant ".php" dans le nom, vous auriez besoin d'une expression plus complexe pour correspondre uniquement aux fichiers)
  • -exec - Exécute une commande si les tests précédents retournent vrai. L'argument suivant est la commande, tous les arguments restants jusqu'à ; sont passés à la commande. le {} est un argument spécial représentant le nom du fichier.
  • cp - La commande find` doit s'exécuter sur chacun des noms de chemin correspondants.
  • {} - Le chemin du fichier trouvé, passé à cp comme argument pour qu'il sache quel fichier copier
  • /destination/folder/ - argument passé à cp , indiquant cp où il doit copier le fichier.
  • \; - C'est le ; terminateur qui -exec cherche. On y échappe avec un \ afin que votre shell n'essaie pas de l'analyser et le fournisse à la place en tant qu'argument de la commande (find )

Il est plutôt difficile d'écrire une expression régulière qui correspond à "des chaînes qui n'ont pas .php ", nous disons donc à la place find pour rechercher des chaînes qui font contient .php puis inverser les résultats avec ! .


Vous pouvez utiliser quelques autres outils de la console, comme grep et xargs.

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

Linux
  1. Comment utiliser la commande Linux grep

  2. Comment utiliser la commande history sous Linux

  3. Comment utiliser la commande su sous Linux avec des exemples

  4. Comment utiliser la commande id sous Linux

  5. Comment utiliser la commande "screen" sous Linux

Comment utiliser la commande Linux Ping

Comment utiliser la commande fd sur le système Linux

Comment utiliser la commande wget sous Linux ?

Comment utiliser la commande xargs sous Linux ?

Comment utiliser la commande RPM sous Linux

Comment utiliser la commande which sous Linux