Eu tenho um script simples que eu entendo mais, é o comando find que não está claro. Eu tenho muita documentação, mas ela não está servindo para torná-la muito mais clara. Meu pensamento é que ele está trabalhando como um para-loop, o arquivo encontrado atualmente é trocado dentro para {} e copiados para $ HOME / $ dir_name, mas como é que a pesquisa com -caminho e -o -prune trabalho? É irritante ter essa documentação específica e relevante e ainda não saber o que está acontecendo.
#!/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
Esta é apenas a documentação que eu sei que deveria ser capaz de descobrir.
-path padrão
O nome do arquivo corresponde ao padrão do shell. Os metacaracteres não tratam / ou . especialmente; então, por exemplo, encontre. -path "./sr*sc" imprimirá uma entrada para um diretório chamado ./src/misc (se houver). Para ignorar uma árvore de diretórios inteira, use -prune em vez de verificar todos os arquivos na árvore. Por exemplo, para pular o diretório src / emacs e todos os arquivos e diretórios abaixo dele, e imprimir os nomes dos outros arquivos encontrados, faça algo assim:
find . -path ./src/emacs -prune -o -print
- Ação: comando -exec; Essa variante insegura da ação -execdir é especificada pelo POSIX. A principal diferença é que o comando é executado no diretório a partir do qual a localização foi invocada, o que significa que {} é expandido para um caminho relativo começando com o nome de um dos diretórios iniciais, em vez de apenas o nome base do arquivo correspondente.
Enquanto algumas implementações de find substituem o {} somente onde ele aparece por si só em um argumento, o GNU find substitui {} onde quer que ele apareça.
E
Por exemplo, para comparar cada arquivo de cabeçalho C no diretório atual ou abaixo do diretório com o arquivo / tmp / master:
find . -name '*.h' -execdir diff -u '{}' /tmp/master ';'