Variável no comando find definido para nova variável no bash

1

É possível fazer algo assim:

inputNum="$1"

files=($(find /dir/to/check -mtime $inputNum))

Basicamente, a ideia é que eu possa usar um parâmetro de entrada para definir o número de dias para localizar arquivos e configurá-lo para uma matriz variável. Não tenho certeza sobre a sintaxe para tornar isso legível no bash.

    
por user245725 09.08.2017 / 16:09

2 respostas

2

A saída de find não é pós-processável de maneira confiável, a menos que você use -print0 em vez de -print ( -print implícito quando nenhuma ação é especificada).

Para pós-processar a saída de find -print0 e armazenar os caminhos de arquivo em uma matriz:

Com bash4.4 +:

readarray -td '' files < <(find /dir/to/check -mtime "$inputNum" -print0)

Com versões mais antigas:

files=()
while IFS= read -rd '' file; do
  files=("${files[@]}" "$file")
done < <(find /dir/to/check -mtime "$inputNum" -print0)

Mais genericamente, você desejaria ler as recomendações em: Por que o looping é uma má prática de saída?

    
por 09.08.2017 / 16:30
0

Se você puder usar zsh em vez de bash, então é muito mais fácil. O Zsh pode corresponder arquivos com base em seus atributos por meio de qualificadores da glob .

files=(/dir/to/check/**/*(Dm$inputNum))

**/* pesquisa subdiretórios recursivamente. Os parênteses após * contêm qualificadores glob: D para incluir arquivos de ponto e m para corresponder arquivos com base no tempo de modificação em dias como find -mtime (você também pode escolher uma unidade diferente e limitar o tempo , por exemplo, (Dmm-$min) age como find -mmin -$min ).

O Zsh é pré-instalado no macOS. Na maioria dos outros sistemas unix (em particular a maioria das distribuições Linux), ele está disponível como um pacote, mas não é instalado por padrão.

    
por 10.08.2017 / 00:48