Je suis en train de lister tous les fichiers de dir1
, dir2
, dir3
et dir4
qui pourrait être n'importe où dans un sous - répertoire de mon cwd
aide de la find
commande. J'ai essayé ce qui suit sans succès:
find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+'
J'ai essayé posix-extended
aussi. Comment puis-je lister ces fichiers?
bash
find
regular-expression
Aaron
la source
la source
Réponses:
Et si vous voulez rechercher trois dossiers nommés
foo
,bar
etbaz
pour tous les*.py
fichiers, utilisez cette commande:find foo bar baz -name "*.py"
donc si vous voulez afficher des fichiers d'
dir1
dir2
dir3
utilisationfind dir1 dir2 dir3 -type f
essaye ça
find . \( -name "dir1" -o -name "dir2" \) -exec ls '{}' \;
la source
./dir
au lieu dedir
./path/to/dir1
), auquel cas./dir1
il n’existerait pas.Il est préférable d'utiliser la directive -path:
Ce qui signifie: trouve tous les fichiers sous le répertoire courant où il y a 'dir1' ou 'dir2' ou 'dir3' ou 'dir4' dans le chemin.
la source
-a
et-o
pour l'équivalent standard de GNU-and
/-or
.Juste pour que tout le monde sache. Ajouter
.*/
avant chaquedir
problème résolu, carregex
il semble correspondre au chemin complet.la source
C'est ma première idée après avoir lu les réponses précédentes:
Cela prend en compte le fait que la regex doit correspondre à tout le nom du fichier, ce qui est plus facile à comprendre.
la source
Exemple de recherche rapide (!) De fichiers particuliers (access_log) dans plusieurs emplacements définis par le caractère générique (répertoire de base) et le répertoire de journaux général apache2, qui applique également le filtrage des noms afin d’exclure les journaux ssl et les anciens journaux gzippés. Ne répond pas directement à la question ici, mais pourrait être utile pour quelqu'un qui a trouvé ces instructions (comme moi).
Faites attention aux espaces, spécialement près de
\(
et\)
.À propos, je l’ai utilisé pour apachetop, pour trouver les sites Web les plus actifs sur mon serveur.
la source
vous n'avez pas besoin de spécifier dir1 à dir4 par nom si vous utilisez regextype
type f
: trouver des fichiers pas des répertoiresregextype sed
: utilise sed regextyperegex
: recherche en utilisant regex dans tout le chemin".*/dir[1-4]/[a-z0-9]*"
:. * au début signifie n'importe quel nombre de caractères pouvant être de type (char / number / backslash (/) etc.); dir [1-4] signifie rechercher "dir" suivi d'un nombre compris entre 1 et 4; / [^ /] * indique que suivre dir1-4 omet tous les noms de chemin qui ont / dans, de sorte qu'il ne renvoie que les fichiers du répertoire dir1-dir4 et ignore les sous-répertoires éventuellement présents dans dir1-dir4.a créé un répertoire pour le tester: https://github.com/alphaCTzo7G/stackexchange/tree/master/linux/findSolution04092017
la source
red
,green
,blue
etyellow
, ou ils pourraient êtreJohn
,Paul
,George
etRingo
.) Votre réponse suppose qu'ils sont littéralementdir1
,dir2
,dir3
etdir4
. … (Suite)foo_bar
,foo.txt
etFOO
)? (4) Pourquoi votre texte explique-t-il/[^/]*
quand votre réponse ne l'utilise pas?Je sais que vous avez spécifié qu'en utilisant find, mais uniquement pour afficher d'autres options utilisables, vous pouvez utiliser xargs:
Vous pouvez avoir un fichier nommé "dossiers" qui contient quelque chose comme:
Ensuite, vous pouvez faire quelque chose comme ceci:
xargs à mon avis, je me sens plus polyvalent que trouver -exec. Aussi, vous pouvez faire des trucs fous comme
la source