table des matières
2. Forme grammaticale et paramètres communs
Lorsque nous utilisons Linux, l'une des commandes que nous utilisons souvent pour rechercher des fichiers est find. Comprendre la fonction et l'utilisation de find peut améliorer l'efficacité du travail. Ce qui suit décrit l'utilisation de find avec des exemples spécifiques.
1. Concepts de base
La commande find est utilisée pour rechercher des fichiers (faisant référence à des fichiers et répertoires ordinaires) dans le répertoire et les sous-répertoires spécifiés .
2. Forme grammaticale et paramètres communs
2.1 Forme grammaticale
trouver [chemin ...] [expression]
Parmi eux, path est le chemin de recherche et plusieurs chemins sont séparés par des espaces; expression: se compose d'options et d'actions.
2.2 Paramètres communs
-name modèle: recherche les fichiers selon le modèle spécifié;
-iname pattern: identique au paramètre -name, la différence est qu'il n'est pas sensible à la casse;
-type c: recherche les fichiers selon le type de fichier c;
Parmi eux: c représente le type de fichier, les valeurs possibles sont:
d: répertoire;
f: fichier ordinaire;
l: lien symbolique;
s: socket;
c: fichier de caractères spéciaux;
b: fichier de bloc spécial;
p: pipeline de commandes (FIFO)
-ctime n: trouve les fichiers modifiés au cours des n derniers jours;
-cnewer file: recherche les fichiers plus récents que le fichier fichier ("update": fait référence à l'heure de modification);
-exec commond {} \;: exécutez la commande shell listée dans ce paramètre sur le fichier trouvé, faites attention à un espace entre {} et \;
-ok commond {} \;: La fonction et le mode de paramètre sont les mêmes que -exec, mais chaque fois que commond est exécuté, l'utilisateur sera invité à l'exécuter. Entrez O / N pour sélectionner.
Trois, exemple d'explication
3.1 Paramètre -name / -iname
Tout d'abord, créez le fichier readme.md dans le répertoire en cours, puis recherchez le fichier dont le nom correspond au modèle "* README.md".
[root@localhost go]# touch readme.md
[root@localhost go]# find . -name "*README.md"
./README.md
./misc/trace/README.md
./src/cmd/compile/README.md
./src/cmd/compile/internal/ssa/README.md
./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
./src/cmd/vendor/golang.org/x/sys/unix/README.md
./test/README.md
[root@localhost go]#
Comme vous pouvez le voir dans l'exemple ci-dessus, les fichiers satisfaisant au modèle "* README.md" sont tous trouvés, mais le fichier en minuscules readme.md n'est pas trouvé. Regardons le résultat du remplacement du paramètre -iname:
[root@localhost go]# find . -iname "*ME.md"
./README.md
./misc/trace/README.md
./src/cmd/compile/README.md
./src/cmd/compile/internal/ssa/README.md
./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
./src/cmd/vendor/golang.org/x/sys/unix/README.md
./test/README.md
./readme.md
[root@localhost go]#
Comme vous pouvez le voir, le fichier en minuscules readme.md a également été trouvé, c'est la différence entre -name et -iname.
PS: Sous Linux, le paramètre i signifie souvent que la commande n'est pas sensible à la casse.
3.2 -type paramètre
Trouvez tous les répertoires nommés "* src".
[root@localhost go]# find . -type d -name "*src"
./src
./src/cmd/api/testdata/src
./src/cmd/go/testdata/modlegacy/src
./src/cmd/internal/src
./src/cmd/link/testdata/testPErsrc
./src/go/build/testdata/withvendor/src
[root@localhost go]#
Comme vous pouvez le voir dans l'exemple ci-dessus, tous les répertoires qui répondent au modèle "* src" sont affichés et aucun fichier ordinaire qui remplit les conditions n'est répertorié.
Trouvez tous les fichiers nommés "* src".
[root@localhost go]# find . -type f -name "*src"
./src/cmd/compile/internal/syntax/testdata/issue20789.src
./src/cmd/compile/internal/syntax/testdata/issue23385.src
./src/cmd/compile/internal/syntax/testdata/issue23434.src
./src/cmd/compile/internal/syntax/testdata/issue31092.src
./src/cmd/compile/internal/syntax/testdata/sample.src
./src/go/parser/testdata/commas.src
./src/go/parser/testdata/issue11377.src
./src/go/parser/testdata/issue23434.src
……
Comme on peut le voir dans l'exemple ci-dessus, tous les fichiers ordinaires qui correspondent au modèle "* src" ont été trouvés, sans compter les répertoires.
3.3 paramètre -ctime
Commencez par créer le fichier testCtime sous / var / account, puis recherchez les fichiers modifiés le dernier jour dans le répertoire en cours.
[root@localhost account]# ls
pacct
[root@localhost account]# touch testCtime
[root@localhost account]# find . -ctime -1
.
./testCtime
[root@localhost account]#
Comme vous pouvez le voir ci-dessus, "." Et testCtime ont été trouvés, où "." Représente le répertoire courant.
3.4 paramètre -cnewer
Commencez par créer deux fichiers testOne et testTwo, puis créez un répertoire testdir pour trouver des fichiers plus récents que testOne.
[root@localhost go]# touch testOne
[root@localhost go]# touch testTwo
[root@localhost go]# mkdir testdir
[root@localhost go]# find . -cnewer testOne
.
./testTwo
./testdir
[root@localhost go]#
Comme le montrent les résultats de la requête ci-dessus, les fichiers qui sont plus récents que testOne peuvent être interrogés .
3.5 paramètre -exec / -ok
Recherchez les fichiers correspondant au modèle "README.md" dans le répertoire courant et les sous-répertoires, et exécutez la commande ls -l pour obtenir les résultats.
[root@localhost go]# find . -name "README.md" -exec ls -l {} \;
-rw-r--r--. 1 root root 1607 9月 10 00:57 ./README.md
-rw-r--r--. 1 root root 5066 9月 10 00:57 ./misc/trace/README.md
-rw-r--r--. 1 root root 5655 9月 10 00:57 ./src/cmd/compile/README.md
-rw-r--r--. 1 root root 7945 9月 10 00:57 ./src/cmd/compile/internal/ssa/README.md
-rw-r--r--. 1 root root 2834 9月 10 00:57 ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
-rw-r--r--. 1 root root 98 9月 10 00:57 ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
-rw-r--r--. 1 root root 8678 9月 10 00:57 ./src/cmd/vendor/golang.org/x/sys/unix/README.md
-rw-r--r--. 1 root root 577 9月 10 00:57 ./test/README.md
[root@localhost go]#
Comme ci-dessus, changez le paramètre de -exec en -ok et exécutez comme suit:
[root@localhost go]# find . -name "README.md" -ok ls -l {} \;
< ls ... ./README.md > ? y
-rw-r--r--. 1 root root 1607 9月 10 00:57 ./README.md
< ls ... ./misc/trace/README.md > ? y
-rw-r--r--. 1 root root 5066 9月 10 00:57 ./misc/trace/README.md
< ls ... ./src/cmd/compile/README.md > ? y
-rw-r--r--. 1 root root 5655 9月 10 00:57 ./src/cmd/compile/README.md
< ls ... ./src/cmd/compile/internal/ssa/README.md > ? y
-rw-r--r--. 1 root root 7945 9月 10 00:57 ./src/cmd/compile/internal/ssa/README.md
< ls ... ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md > ? y
-rw-r--r--. 1 root root 2834 9月 10 00:57 ./src/cmd/vendor/github.com/google/pprof/third_party/d3/README.md
< ls ... ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md > ? y
-rw-r--r--. 1 root root 98 9月 10 00:57 ./src/cmd/vendor/github.com/ianlancetaylor/demangle/README.md
< ls ... ./src/cmd/vendor/golang.org/x/sys/unix/README.md > ? N
< ls ... ./test/README.md > ? N
[root@localhost go]#
Comme vous pouvez le voir dans l'exemple ci-dessus, chaque fois que vous exécutez la commande ls -l, il vous sera demandé si vous devez l'exécuter.
Quatre, résumé
Les paramètres communs de find sont listés ci-dessus. Il faut noter que la recherche de find est une recherche récursive. Par exemple, lors d'une recherche dans le répertoire courant, il recherchera les fichiers dans le répertoire courant et les sous-répertoires par défaut.
Cinq, références
[1] https://www.runoob.com/linux/linux-comm-find.html
[2] https://man7.org/linux/man-pages/man1/find.1.html