Non sono sicuro di cosa sto sbagliando su questo. Ho letto un sacco di post e siti web, ma ho ancora problemi.
Devo controllare un sistema per i file che sono cambiati nell'ultimo giorno, ma devo saltare alcune cartelle montate poiché sono montate su unità con tonnellate di TB.
Ecco la configurazione:
Ho poche unità montate in cartelle all'interno di /usr/local/connect/
/usr/local/connect/logs –> monta su un NFS
/usr/ local/connect/DR01 –> monta su una condivisione DR
alcuni altri come questo...
Voglio eseguire un normale comando di ricerca (o qualsiasi comando che funzioni per questo) che escluda quelle directory. Ecco qualcosa che ho provato che non sembrava funzionare.
Trovare . ! -percorso “/usr/local/connect/” -tipo f -nome “*.txt” -mtime -1
Trovare . -type f -path “/usr/local/connect/” -prune -o -name “*.txt” -mtime -1
Nessuno di questi sembra funzionare. Ho anche provato a farlo in diversi ordini (come -type f first, o potato first in line, ecc.). Ma ho letto che prune rimuove il percorso successivo. Sembra che dovrebbe essere una cosa facile da fare. Fammi sapere se vedi il mio errore! Grazie in anticipo!
Risposta accettata:
-path "/usr/local/connect/"
corrisponderebbe solo su un percorso di file che è esattamente /usr/local/connect/
. Questo non corrisponderà mai perché con find .
, tutti i percorsi inizieranno con .
Quindi vorresti:
find / -path '/usr/local/connect/*' -type d -prune -o \
-name '*.txt' -type f -mtime -1 -print
Il -print
è anche importante. Senza di essa, ci sarebbe un implicito -print
per i file che corrispondono all'intera espressione (quindi entrambe le parti di -o
).
Nota che puoi anche usare -xdev
per impedire il superamento di qualsiasi limite del file system.
Se vuoi eseguirlo con find .
quando la directory corrente è /usr/local
, dovrebbe essere:
cd /usr/local &&
find . -path './connect/*' -type d -prune -o \
-name '*.txt' -type f -mtime -1 -print