web-dev-qa-db-fra.com

Comment inclure / exclure de nombreux fichiers / dossiers différents à l'aide du terminal

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?

3
John

-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
6
geirha

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
1
Arronical