Ho un semplice script di cui capisco la maggior parte, è il comando find che non è chiaro. Ho molta documentazione, ma non serve a renderlo molto più chiaro. Il mio pensiero è che funzioni come un for-loop, il file attualmente trovato viene scambiato con {} e copiato in $ HOME / $ dir_name, ma come funziona la ricerca con -path e -prune -o ? È fastidioso avere una documentazione così specifica e pertinente e ancora non sapere cosa sta succedendo.
#!/bin/bash
# The files will be search on from the user's home
# directory and can only be backed up to a directory
# within $HOME
read -p "Which file types do you want to backup " file_suffix
read -p "Which directory do you want to backup to " dir_name
# The next lines creates the directory if it does not exist
test -d $HOME/$dir_name || mkdir -m 700 $HOME/$dir_name
# The find command will copy files that match the
# search criteria ie .sh . The -path, -prune and -o
# options are to exclude the backdirectory from the
# backup.
find $HOME -path $HOME/$dir_name -prune -o \
-name "*$file_suffix" -exec cp {} $HOME/$dir_name/ \;
exit 0
Questa è solo la documentazione che so dovrei essere in grado di capire da.
modello di percorso
Il nome del file corrisponde al modello di conchiglia. I metacaratteri non trattano / o . appositamente; quindi, ad esempio, trova. -path "./sr*sc" stamperà una voce per una directory chiamata ./src/misc (se ne esiste una). Per ignorare un intero albero di directory, utilizzare -prune anziché controllare tutti i file nella struttura. Ad esempio, per saltare la directory src / emacs e tutti i file e le directory sottostanti e stampare i nomi degli altri file trovati, fare qualcosa del genere:
find . -path ./src/emacs -prune -o -print
- Azione: comando -exec; Questa variante non sicura dell'azione -execdir è specificata da POSIX. La differenza principale è che il comando viene eseguito nella directory da cui è stato richiamato find , il che significa che {} viene espanso in un percorso relativo che inizia con il nome di una delle directory di partenza, anziché solo il nome di base del file corrispondente.
Mentre alcune implementazioni di find sostituiscono {} solo dove appare da solo in un argomento, GNU find sostituisce {} ovunque appaia.
E
Ad esempio, per confrontare ogni file di intestazione C nella o sotto la directory corrente con il file / tmp / master:
find . -name '*.h' -execdir diff -u '{}' /tmp/master ';'