Estou usando find
para localizar e excluir arquivos de backup, mas desejo excluir determinados diretórios da pesquisa. Os nomes de arquivos de backup poderia terminar em .bck
, bak
, ~
, ou backup
.
O código do Exemplo Mínimo de Trabalho (MWE) com apenas três diretórios a serem excluídos é:
#! /bin/bash
find . -type d \( -path "./.*" -o -path "./Music" -o -path "./Documents" \) -prune -o -type f \( -name "*.bck" -o -name "*.bak" -o -name "*~" -o -name "*.backup" \) -print0 | xargs -0 --no-run-if-empty trash-put
A sintaxe \( -path "dir1" -o -path "dir2" ... -o -path "dirN" \) -prune
parece um pouco desajeitada, especialmente se houver cerca de dez diretórios a serem excluídos, embora eu tenha mostrado apenas três no MWE.
Existe uma maneira mais elegante de usar um arquivo de entrada, com a lista de diretórios excluídos ou uma construção semelhante a uma matriz ou lista, que possa ser pressionada para o serviço?
Lamento não ter sido mais explícito quando escrevi minha pergunta original.
Nota: trash-put
é um utilitário que move os arquivos para, em Trashcan
vez de excluí-los [1].
Com o GNU find (ou seja, no Linux ou Cygwin não incorporado), você pode usar
-regex
para combinar todos esses-path
curingas em um único regex.Com o FreeBSD ou OSX, use em
-E
vez de-regextype posix-extended
.fonte
Agrupe
-path ... -prune
em uma expressão fechada\( ... \)
usando-o
( ou ) lógica.O exemplo vai diretórios não ITERATE ou arquivos ou sob
/somepath/a
,/somepath/b
e/somepath/c
.Aqui está um exemplo mais específico usando várias ações.
fonte
Isso parece ser mais uma questão de shell do que uma
find
pergunta. Com um arquivo contendo( -name dir1 -o -name dir2 ) -prune
(sem "\"!), Você pode simplesmente fazer isso:Sem alterar a chamada de busca em si (para
eval find
ou alterando $ IFS), isso funciona com caminhos sem apenas espaço em branco.Se você deseja manter o arquivo mais simples, pode escrever um script.
E use
em vez de.
fonte
-name
porpath
).\( -path "dir1" -o -path "dir2" ... -o -path "dirN" \) -prune
que excluir determinados diretórios da pesquisa recursiva que existefind
. Não estou procurando nada nos arquivos, mas excluindo determinados arquivos e evitando determinados diretórios no meu caminho de pesquisa. Também não entendo o que seu script está tentando fazer. Então, parece que temos uma falta de comunicação. Desculpa. Vamos deixar assim.