Je recherche des fichiers qui ont été modifiés au cours de la dernière journée en utilisant le find . -type f -mtime 0
fonction dans le terminal. Je souhaite exclure certains fichiers et dossiers de la requête, tels que .DS_Store
fichiers et .sh
des dossiers.
Actuellement, je fais ceci:
find . -type f -not -path "*.DS_Store" -and -not -path "*.sh" -mtime 0
Il me reste encore beaucoup de fichiers à exclure et je me demande s'il est possible de raccourcir l'expression. Je ne veux pas écrire:
-not -path "PathHere" -and -not -path "AnotherPathHere"
etc.
Aucune suggestion?
-and
est redondant malgré tout, vous pouvez donc simplement le supprimer et !
peut être utilisé à la place du non standard -not
opérateur. Vous pouvez utiliser un tableau bash pour répertorier les exclus par ligne. Pas beaucoup plus court, mais plus facile à lire et à modifier.
filters=(
! -name '*.DS_Store'
! -name '*.sh'
! -name '*.bash'
)
find . -type f \( "${filters[@]}" \) -print
Étendre ce qui précède pour éviter également de descendre dans certains répertoires en utilisant -Prune
:
filters=(
! -name '*.DS_Store'
! -name '*.sh'
! -name '*.bash'
)
Prune_dirs=(
-name '*.tmp'
-o -name 'tmp'
-o -name '.Trash*'
)
find . -type d \( "${Prune_dirs[@]}" \) -Prune -o -type f \( "${filters[@]}" \) -print
Vous pouvez utiliser la correspondance de modèle Bash standard, ou globbing , dans la commande find, vous pouvez donc utiliser le -iname
option (qui est une recherche de nom insensible à la casse) et !
comme opérateur "non", donc pour le cas que vous avez posé:
find . -type f \( ! -iname ".DS_Store" ! -iname "*.sh" \) -mtime 0