1 votes

Comment utiliser find avec regex pour supprimer les fichiers commençant par certaines lettres

J'ai une structure de répertoires imbriqués qui ressemble à ceci :

top_dir
 nested_1
     nested_2
         a_file.txt
         b_file.txt
         directory
         other_directory
         y_file.txt
         z_file.txt

Je veux supprimer les fichiers à l'intérieur nested_2 qui ne commencent pas par A-M, et laissez les répertoires tranquilles. Je veux donc supprimer y_file.txt y z_file.txt .

J'ai besoin d'exécuter la commande find + regex en top_dir .

J'ai essayé de multiples versions de ceci :

find nested_1/nested_2 -maxdepth 1 -mindepth 1 -type f -regex "nested_1\/nested_2\/.*^[a-m]" #-delete

Le choix de la regex utilisée ne semble pas avoir d'importance - la seule qui produit un résultat est

find nested_1/nested_2 -maxdepth 1 -mindepth 1 -type f -regex ".*" #-delete

qui me donne juste une liste de tous les fichiers dans le répertoire avec les répertoires imbriqués en tête (comme prévu).

Le fait de le tester avec regexr n'a pas aidé non plus.

Qu'est-ce que je rate ici ?

0voto

Kamil Maciorowski Points 57004
  1. ^[a-m] devrait être [^a-m] .
  2. Après la première lettre, il peut y avoir le reste du nom de fichier, donc vous devez .* après [^a-m] pas avant.
  3. Ces backshlashs ne sont pas nécessaires (mais ils ne font pas de mal).

    find nested_1/nested_2 -maxdepth 1 -mindepth 1 -type f -regex "nested_1/nested_2/[^a-m].*" #-delete

Notes :

  • Linux et ses systèmes de fichiers sont sensibles à la casse. Les choses "qui ne commencent pas par A-M" seraient [^A-M].* .
  • A veces [^a-m] (ou [^A-M] ) peut ne pas être ce que vous pensez .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X