MaJ du 04-02-2021
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
# find
|
||||
|
||||
(Voir aussi [fd](fd.md))
|
||||
|
||||
|
||||
|
||||
La commande **find** permet de retrouver des fichiers à partir de certains critères. Elle doit être utilisé avec l'option **-print**
|
||||
@@ -21,16 +23,64 @@ Les <u>critères de recherche</u> sont les suivants :
|
||||
|
||||
|
||||
|
||||
#### Nom:
|
||||
|
||||
Recherche par <u>nom de fichier</u>:
|
||||
|
||||
```bash
|
||||
find /usr -name toto -print
|
||||
$ find /usr -name toto -print
|
||||
|
||||
find /usr -name " *.c " -print
|
||||
$ find /usr -name " *.c " -print
|
||||
|
||||
# commence par un a ou A, suivi de quelque chose, et se termine par un chiffre compris entre 3 et 6
|
||||
|
||||
find . -name '[aA]*[3-6]' -print
|
||||
$ find . -name '[aA]*[3-6]' -print
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### Taille:
|
||||
|
||||
Recherche suivant la <u>taille</u>:
|
||||
|
||||
```bash
|
||||
# fichiers dont la taille dépasse 30ko
|
||||
|
||||
$ find / -size +30k -print
|
||||
|
||||
# fichiers dont la taille est comprise entre 30 et 100ko
|
||||
|
||||
$ find / -size +30k -size -100k
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### Opérateurs logiques:
|
||||
|
||||
Recherche en utilisant les <u>opérateurs logiques</u>:
|
||||
|
||||
```bash
|
||||
# les fichiers n'appartenant pas à l'utilisateur olivierles fichiers n'appartenant pas à l'utilisateur olivier
|
||||
|
||||
$ find . ! -user olivier -print
|
||||
|
||||
# Recherche les fichiers dont le nom est a.out ou les fichiers se terminant par *.c (une condition OU l'autre).
|
||||
|
||||
$ find . \ ( -name a.out -o -name " *.c " \ ) -print
|
||||
|
||||
# Recherche des fichiers dont le nom est core et d'une taille supérieure à 1Mo (une condition ET l'autre).
|
||||
|
||||
$ find . \ (-name core -a size +2000 \ ) -print
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### Date:
|
||||
|
||||
Rechercher <u>le plus vieux</u> fichier:
|
||||
|
||||
```bash
|
||||
$ find / -type f -printf '%T+ %p\n' | sort | head -n 1
|
||||
```
|
||||
|
||||
Recherche suivant la <u>date de dernière modification</u>:
|
||||
@@ -38,53 +88,69 @@ Recherche suivant la <u>date de dernière modification</u>:
|
||||
```bash
|
||||
# modifiés il y a 30 jours
|
||||
|
||||
find / -mtime 30 -print
|
||||
$ find / -mtime 30 -print
|
||||
|
||||
# modifiés il y a 30 jours ou plus
|
||||
|
||||
find / -mtime +30 -print
|
||||
$ find / -mtime +30 -print
|
||||
|
||||
# modifiés il y a 30 jours ou moins
|
||||
|
||||
find / -mtime 30 -print
|
||||
$ find / -mtime 30 -print
|
||||
|
||||
# modifiés il y a plus de 50 jours et moins de 100
|
||||
|
||||
$ find / -mtime +50 –mtime -100
|
||||
|
||||
# modifiés dans la dernière heure
|
||||
|
||||
$ find / -mmin -60
|
||||
|
||||
# accédées dans la dernière heure
|
||||
|
||||
$ find / -amin -60
|
||||
```
|
||||
|
||||
```bash
|
||||
find . -mtime +0 # find files modified greater than 24 hours ago
|
||||
find . -mtime 0 # find files modified between now and 1 day ago (i.e., in the past 24 hours only)
|
||||
find . -mtime -1 # find files modified less than 1 day ago (SAME AS -mtime 0)
|
||||
find . -mtime 1 # find files modified between 24 and 48 hours ago
|
||||
find . -mtime +1 # find files modified more than 48 hours ago
|
||||
$ find . -mtime +0 # find files modified greater than 24 hours ago
|
||||
$ find . -mtime 0 # find files modified between now and 1 day ago (i.e., in the past 24 hours only)
|
||||
$ find . -mtime -1 # find files modified less than 1 day ago (SAME AS -mtime 0)
|
||||
$ find . -mtime 1 # find files modified between 24 and 48 hours ago
|
||||
$ find . -mtime +1 # find files modified more than 48 hours ago
|
||||
```
|
||||
|
||||
Rechercher <u>le plus vieux</u> fichier:
|
||||
|
||||
|
||||
#### Permissions:
|
||||
|
||||
Rechercher des <u>permissions</u>:
|
||||
|
||||
```bash
|
||||
find / -type f -printf '%T+ %p\n' | sort | head -n 1
|
||||
$ find /volume1/@appstore/PHP7.4/etc -perm 644
|
||||
/volume1/@appstore/PHP7.4/etc/php/conf.d/memcached.ini
|
||||
/volume1/@appstore/PHP7.4/etc/php/conf.d/redis.ini
|
||||
|
||||
$ ls -la
|
||||
-rw-r--r-- 1 root root 25 Sep 14 13:39 memcached.ini
|
||||
-rw-r--r-- 1 root root 21 Sep 14 13:39 redis.ini
|
||||
```
|
||||
|
||||
Recherche suivant la <u>taille</u>:
|
||||
<u>Inverser</u> la recherche (!):
|
||||
|
||||
```bash
|
||||
# fichiers dont la taille dépasse 30ko
|
||||
|
||||
find / -size +30k -print
|
||||
$ find /volume1/@appstore/PHP7.4/etc ! -perm 644
|
||||
/volume1/@appstore/PHP7.4/etc
|
||||
/volume1/@appstore/PHP7.4/etc/php
|
||||
/volume1/@appstore/PHP7.4/etc/php/conf.d
|
||||
```
|
||||
|
||||
Recherche en utilisant les <u>opérateurs logiques</u>:
|
||||
Rechercher les fichiers avec permission 777 et les modifiés en 644:
|
||||
|
||||
```bash
|
||||
# les fichiers n'appartenant pas à l'utilisateur olivierles fichiers n'appartenant pas à l'utilisateur olivier
|
||||
$ find / -type f -perm 0777 -print -exec chmod 644 {} \;
|
||||
|
||||
find . ! -user olivier -print
|
||||
|
||||
# Recherche les fichiers dont le nom est a.out ou les fichiers se terminant par *.c (une condition OU l'autre).
|
||||
|
||||
find . \ ( -name a.out -o -name " *.c " \ ) -print
|
||||
|
||||
# Recherche des fichiers dont le nom est core et d'une taille supérieure à 1Mo (une condition ET l'autre).
|
||||
|
||||
find . \ (-name core -a size +2000 \ ) -print
|
||||
# idem pour les dossiers
|
||||
$ find / -type d -perm 777 -print -exec chmod 755 {} \;
|
||||
```
|
||||
|
||||
Recherche <u>combinée</u>:
|
||||
@@ -92,53 +158,208 @@ Recherche <u>combinée</u>:
|
||||
```bash
|
||||
# les fichiers de l'utilisateur bruno dont les permissions sont 755
|
||||
|
||||
find / -type f -user bruno -perm 755 -print
|
||||
$ find / -type f -user bruno -perm 755 -print
|
||||
```
|
||||
|
||||
Rechercher les exécutables:
|
||||
|
||||
```bash
|
||||
$ find /var/services/homes/bruno -perm /a=x
|
||||
```
|
||||
|
||||
Rechercher les fichiers en lecture seule:
|
||||
|
||||
```bash
|
||||
$ find /var/services/homes/bruno -perm /u=r
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### Regex:
|
||||
|
||||
Recherche avec <u>regex</u>:
|
||||
|
||||
```bash
|
||||
# les images avec extentions jpg|gif|png|jpeg dans le dossier Users
|
||||
# -E => macOS only ??
|
||||
|
||||
find -E /Users/bruno -regex ".*\.(jpg|gif|png|jpeg)"
|
||||
$ find -E /Users/bruno -regex ".*\.(jpg|gif|png|jpeg)"
|
||||
$ find -E $HOME/Music -regex ".*\.(mp3|flac)"
|
||||
|
||||
# non case-sensitive
|
||||
find -E /Users/bruno -iregex ".*\.(jpg|gif|png|jpeg)"
|
||||
$ find -E /Users/bruno -iregex ".*\.(jpg|gif|png|jpeg)"
|
||||
|
||||
# Linux / GNU find (macOS)
|
||||
$ find $HOME/Music -regex ".*\.\(mp3\|flac\)"
|
||||
$ gfind $HOME/Music -regex ".*\.\(mp3\|flac\)"
|
||||
```
|
||||
|
||||
|
||||
|
||||
Commandes en option:
|
||||
#### User / group:
|
||||
|
||||
```bash
|
||||
$ find /home -user bruno
|
||||
|
||||
$ find /home -group http
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### Commandes en option:
|
||||
|
||||
```bash
|
||||
# Recherche les fichiers toto et les efface.
|
||||
|
||||
find . -name toto -exec rm {}\ ;
|
||||
$ find . -name toto -exec rm {}\ ;
|
||||
|
||||
# Pour avoir une demande de confirmation avant l'exécution de rm
|
||||
|
||||
find . -name toto -ok rm {}\ ;
|
||||
$ find . -name toto -ok rm {}\ ;
|
||||
```
|
||||
|
||||
Utilisation avec d'autres commandes:'
|
||||
|
||||
|
||||
#### Utilisation avec d'autres commandes:'
|
||||
|
||||
```bash
|
||||
# Recherche les fichiers normaux dans le répertoire courant, puis chercher le chaine toto dans ces fichiers.
|
||||
|
||||
find . -type f -print | xargs grep toto
|
||||
$ find . -type f -print | xargs grep toto
|
||||
|
||||
# Recherche les fichiers toto et les efface après confimation (-p).
|
||||
# idem -exec, " | xargs " ne crée qu'un seim processus.
|
||||
|
||||
find . -name toto | xargs -p rm
|
||||
$ find . -name toto | xargs -p rm
|
||||
```
|
||||
|
||||
|
||||
|
||||
Redirection des messages d'erreur:
|
||||
#### Effacer tous les fichiers d'un dossier sauf un:
|
||||
|
||||
```bash
|
||||
find / -name toto -print 2>/dev/null
|
||||
$ find . -type f ! -name 'fichier-a-garder.tar.gz' -delete
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### Présentation de la sortie:
|
||||
|
||||
l'option -ls correspond à un 'ls -dils'
|
||||
|
||||
```bash
|
||||
$ find /var/services/homes/bruno -name "*php*.ini" -ls
|
||||
56408 72 -rwxrwxrwx 1 bruno users 72040 Nov 10 2017 /var/services/homes/bruno/Drive/Drive/Apache\ -\ PHP/Backup\ Silverbook/php.ini
|
||||
364193 8 -rw-r--r-- 1 root root 8169 Nov 13 10:53 /var/services/homes/bruno/php74.ini
|
||||
364195 8 -rw-r--r-- 1 root root 8145 Nov 13 10:55 /var/services/homes/bruno/php73.ini
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### printf
|
||||
|
||||
affiche le *format* indiqué sur la sortie standard
|
||||
|
||||
```bash
|
||||
# taille en octet - nom
|
||||
$ find /var/services/homes/bruno -name "*php*.ini" -printf '%s %p\n'
|
||||
72040 /var/services/homes/bruno/Drive/Drive/Apache - PHP/Backup Silverbook/php.ini
|
||||
8169 /var/services/homes/bruno/php74.ini
|
||||
8145 /var/services/homes/bruno/php73.ini
|
||||
|
||||
# date - bits - user:group - taille en octet - nom
|
||||
$ find /var/services/homes/bruno -name "*php*.ini" -printf "%t %M %u:%g %s %p\n"
|
||||
Fri Nov 10 09:10:42.0000000000 2017 -rwxrwxrwx bruno:users 72040 9 /var/services/homes/bruno/Drive/Drive/Apache - PHP/Backup Silverbook/php.ini
|
||||
Fri Nov 13 10:53:58.5922529060 2020 -rw-r--r-- root:root 8169 10 /var/services/homes/bruno/php74.ini
|
||||
Fri Nov 13 10:55:50.7925348300 2020 -rw-r--r-- root:root 8145 10 /var/services/homes/bruno/php73.ini
|
||||
```
|
||||
|
||||
| | |
|
||||
| ---- | ------------------------------------------------------------ |
|
||||
| %u | Nom du propriétaire du fichier |
|
||||
| %g | Nom du groupe propriétaire du fichier |
|
||||
| %s | Taille du fichier en octets |
|
||||
| %k | Taille du fichier en ko |
|
||||
| %p | Nom du fichier |
|
||||
| | |
|
||||
| %t | Date de dernière modification du fichier |
|
||||
| %Tk | Date de dernière modification du fichier |
|
||||
| %m | Bits d'autorisation d'accès au fichier (en octal)(644/755) |
|
||||
| %M | Bits d'autorisation d'accès au fichier (symbole)(-rw-r--r--) |
|
||||
|
||||
|
||||
|
||||
#### fprintf *fichier* format
|
||||
|
||||
écrit le nom complet dans le *fichier*. Si *fichier* n'existe pas au démarrage de **find**, il est créé. S'il existe, il est écrasé.
|
||||
|
||||
|
||||
|
||||
#### Redirection des messages d'erreur:
|
||||
|
||||
```bash
|
||||
$ find /volume1/@appstore/ -name "*php*.ini"
|
||||
/volume1/@appstore/PHP7.0/usr/local/etc/php70/php.ini
|
||||
find: ‘/volume1/@appstore/DNSServer/named/etc/key’: Permission denied
|
||||
find: ‘/volume1/@appstore/DNSServer/named/usr/lib/ocf/lib’: Permission denied
|
||||
find: ‘/volume1/@appstore/DNSServer/named/usr/lib/ocf/resource.d’: Permission denied
|
||||
find: ‘/volume1/@appstore/DNSServer/named/usr/lib/heartbeat/plugins’: Permission denied
|
||||
/volume1/@appstore/PHP7.2/misc/php-fpm.ini
|
||||
/volume1/@appstore/PHP7.2/usr/local/etc/php72/cli/php.ini
|
||||
find: ‘/volume1/@appstore/Gitea/gitea/data’: Permission denied
|
||||
find: ‘/volume1/@appstore/Gitea/gitea/.ssh’: Permission denied
|
||||
/volume1/@appstore/PHP7.3/misc/php-fpm.ini
|
||||
/volume1/@appstore/PHP7.3/usr/local/etc/php73/cli/php.ini
|
||||
/volume1/@appstore/WebStation/misc/php56.ini
|
||||
/volume1/@appstore/WebStation/misc/php70.ini
|
||||
/volume1/@appstore/phpMyAdmin/php_conf/phpMyAdmin.ini
|
||||
/volume1/@appstore/PHP7.4/misc/php-fpm.ini
|
||||
/volume1/@appstore/PHP7.4/usr/local/etc/php74/cli/php.ini
|
||||
```
|
||||
Tous les messages d'erreurs sont redirigés avec `2>/dev/null` vers la poubelle.
|
||||
```bash
|
||||
$ find /volume1/@appstore/ -name "*php*.ini" 2>/dev/null
|
||||
/volume1/@appstore/PHP7.0/usr/local/etc/php70/php.ini
|
||||
/volume1/@appstore/PHP7.2/misc/php-fpm.ini
|
||||
/volume1/@appstore/PHP7.2/usr/local/etc/php72/cli/php.ini
|
||||
/volume1/@appstore/PHP7.3/misc/php-fpm.ini
|
||||
/volume1/@appstore/PHP7.3/usr/local/etc/php73/cli/php.ini
|
||||
/volume1/@appstore/WebStation/misc/php56.ini
|
||||
/volume1/@appstore/WebStation/misc/php70.ini
|
||||
/volume1/@appstore/phpMyAdmin/php_conf/phpMyAdmin.ini
|
||||
/volume1/@appstore/PHP7.4/misc/php-fpm.ini
|
||||
/volume1/@appstore/PHP7.4/usr/local/etc/php74/cli/php.ini
|
||||
```
|
||||
|
||||
C'est un peu plus propre.
|
||||
|
||||
Autre solution avec `grep -v "Permission denied"`, les autres messages d'erreurs restent affichés.
|
||||
|
||||
```bash
|
||||
$ find / -name "*php*.ini" 2>&1 | grep -v "Permission denied"
|
||||
/etc/php/php.ini
|
||||
/volume1/@appstore/PHP7.0/usr/local/etc/php70/php.ini
|
||||
/volume1/@appstore/PHP7.2/misc/php-fpm.ini
|
||||
/volume1/@appstore/PHP7.2/usr/local/etc/php72/cli/php.ini
|
||||
/volume1/@appstore/PHP7.3/misc/php-fpm.ini
|
||||
/volume1/@appstore/PHP7.3/usr/local/etc/php73/cli/php.ini
|
||||
/volume1/@appstore/WebStation/misc/php56.ini
|
||||
/volume1/@appstore/WebStation/misc/php70.ini
|
||||
/volume1/@appstore/phpMyAdmin/php_conf/phpMyAdmin.ini
|
||||
/volume1/@appstore/PHP7.4/misc/php-fpm.ini
|
||||
/volume1/@appstore/PHP7.4/usr/local/etc/php74/cli/php.ini
|
||||
...
|
||||
/volume1/@Entware/opt/etc/php.ini
|
||||
/volume1/docker/piwigo/config/php/php-local.ini
|
||||
/etc.defaults/php/php.ini
|
||||
/opt/etc/php.ini
|
||||
/usr/syno/etc/packages/WebStation/php70/php.ini
|
||||
/usr/syno/etc/packages/WebStation/php56/php.ini
|
||||
/usr/local/etc/php70/php.ini
|
||||
/usr/local/etc/php73/cli/php.ini
|
||||
/usr/local/etc/php74/cli/php.ini
|
||||
/usr/local/etc/php72/cli/php.ini
|
||||
/usr/local/etc/php72/cli/conf.d/phpMyAdmin.ini
|
||||
find: ‘/proc/24000/net’: Invalid argument
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user