Para localizar todos os diretórios *BETA
que possuem novos arquivos neles ( -mtime -1
) e salvar esses nomes de diretórios em list.txt
, tente:
find -type f -path '*BETA/*' -mtime -1 | sed 's|^\./||; s|BETA/.*|BETA|' | sort -u >list.txt
Como seu objetivo é criar dados separados por nova linha no arquivo list.txt
, isso significa que você não espera que nenhum dos diretórios ou arquivos tenha nomes que contenham caracteres de nova linha. Se o fizessem, então, é claro, um formato de saída diferente seria necessário.
Como funciona
-
find -type f -path '*BETA/*' -mtime -1
Isso localiza todos os novos arquivos que têm um diretório pai, em algum lugar no caminho, cujo nome termina em
BETA
quando novo é definido pelas convenções de find para-mtime -1
. -
sed 's|^\./||; s|BETA/.*|BETA|'
Isso remove o
./
inicial dos nomes dos arquivos e também remove tudo após oBETA
. O resultado é o nome do diretório BETA. -
sort -u
A lista de diretórios que
sed
cria terá duplicatas. Isso remove as duplicatas. -
>list.txt
Isso salva a saída em
list.txt
Solução mais geral
A seguinte abordagem é segura mesmo se diretórios ou arquivos tiverem caracteres de nova linha em seus nomes (isso pode exigir ferramentas GNU):
find -type f -path '*BETA/*' -mtime -1 -print0 | sed -z 's|^\./||; s|BETA/.*|BETA|' | sort -zu >list.out
Isso cria um arquivo list.out
que tem os nomes de diretório em formato separado por nul. Como o caractere nulo nunca pode aparecer em um nome de arquivo ou diretório, essa é uma abordagem segura. Para usar list.out
, você, é claro, precisaria lê-lo com uma ferramenta que entende entradas separadas por nul.