Procura de Diretório Recursivo, Mostrando o arquivo mais recente na pasta

0

Alguém pode apontar onde estou errado por favor. Estou fazendo uma pesquisa de diretório (com base na estrutura de pastas e tipo de arquivo) A estrutura da pasta é a mesma para todos os clientes. Apenas a pasta do cliente é nomeada de forma diferente. Exemplo de estrutura:

  • Httpdocs / client1 / channel1 / backup
  • Httpdocs / client5 / channel5 / backup
  • Httpdocs / client8 / channel1 / backup

Isso funciona parcialmente, apenas mostra todos os arquivos na pasta de backup aposto ao arquivo mais recente.

#!/bin/bash

# Array of root folders
#folders=("a" "b")
array=(httpdocs/*\/client1/backup/*.xml)

# Search all specified root folders
for dir in "${array[@]}"; 
do echo "$dir";
    # date of each file with "stat"
    find -path $array -type f -exec stat -f "%m,%N" {} ';' | \
        # sort by date, most recent first
        sort -gr | \
        # extract first (most recent) file
        head -1 | \
        # return file name only
        cut -d, -f2
done
A cabeça

parece não estar funcionando. Alguma razão por quê? minha formatação está errada?

eu também tentei:

find -path "*\/chanel1/backup/*.xml" -type f | sort -gr | head -1 | cut -d, -f2

Isso apenas exibe a última pasta na lista com o arquivo mais recente nessa pasta. (Eu tenho que executar isso dentro da Web Root (Httpdocs))

    
por Dave Hamilton 05.05.2016 / 14:10

1 resposta

0

Eu usaria algo mais parecido com sua última abordagem, como

for d in $(find httpdocs -type d -name backup) do ls -t $d | grep '.xml$' | head -1 done

ls -t classifica por hora modificada, a mais recente primeiro.

Se você quiser o caminho completo na saída, você pode usar ls -t $d/*.xml e pular o grep. Existem maneiras simples, mas não óbvias, de encurtar o nome do caminho se você desejar, como sed ou dirname.

    
por 05.05.2016 / 15:48

Tags