find + delete apenas os arquivos que terminam com .index

0

Temos uma máquina de produção Kafka no Red Hat Enterprise Linux.

  1. Como podemos remover todos os arquivos em /var/kafka/kafka-logs que terminam com .index ?

  2. Como podemos mover todos os arquivos que terminam com .index para outra pasta, /var/tmp/INDEX_BACKUP ?

Exemplo de conteúdo em /var/kafka/kafka-logs :

./hd3gd.ewhd.pri.processed-98/00000000000000000011.index
./hd3gd.ewhd.pri.processed-99/00000000000000000000.index
./hd3gd.ewhd.suspected_relations-0/00000000000000000000.index
./hd3gd.ewhd.suspected_relations-1/00000000000000000000.index
./hd3gd.ewhd.suspected_relations-2/00000000000000000000.index
./hd3gd.ewhd.suspected_relations-3/00000000000000000000.index
./hd3gd.ewhd.suspected_relations-4/00000000000000000000.index
./hd3gd.ewhd.suspected_relations-5/00000000000000000000.index
./frfwjnwe.fwefew.heartbeat-0/00000000000000000000.index
./frfwjnwe.fwefew.heartbeat-1/00000000000000000000.index
./frfwjnwe.fwefew.heartbeat-1/00000000000000017239.index
./frfwjnwe.fwefew.heartbeat-2/00000000000000000000.index
./frfwjnwe.fwefew.heartbeat-2/00000000000000017238.index
    
por yael 14.05.2018 / 12:58

4 respostas

5
  • para remover todos os arquivos que terminam com .index em /var/kafka/kafka-logs , usando o GNU find ou compatível:

    find /var/kafka/kafka-logs -name \*.index -delete
    

    POSIXly:

    find /var/kafka/kafka-logs -name \*.index -exec rm -f {} +
    
  • para movê-los para outra pasta, com GNU mv :

    find /var/kafka/kafka-logs -name \*.index -exec mv -t /var/tmp/INDEX_BACKUP {} +
    

    POSIXly:

    find /var/kafka/kafka-logs -name \*.index -exec sh -c '
      exec mv "$@" /var/tmp/INDEX_BACKUP/' sh {} +
    
por 14.05.2018 / 13:06
0

Anúncio 1:

find /var/kafka/kafka-logs -type f -name "*.index" -exec rm -v {} \;

Responda pela segunda pergunta que você pode encontrar aqui: Como integrar o comando mv após o comando find? .

    
por 14.05.2018 / 13:11
0

Esse comando funcionará mais rápido (comparando com find / -exec) devido a argumentos maiores para o comando rm de uma vez. Isso não requer o GNU find.

Q1.

find /var/kafka/kafka-logs -type f -name "*.index" | xargs rm

Q2.

find /var/kafka/kafka-logs -name "*.index" | xargs -I {} mv {} /var/tmp/INDEX_BACKUP

Observe também que o GNU find não suporta ACLs ou Extended Attributes, então você definitivamente não quer usar o GNU find no Solaris.

    
por 14.05.2018 / 14:38
0

Usando bash e assumindo que não há milhares desses arquivos:

  1. rm /var/kafka/kafka-logs/**.index

  2. mv /var/kafka/kafka-logs/**.index /var/tmp/INDEX_BACKUP

    Isso não verificaria se os nomes no destino já existem, portanto, pode sobrescrever arquivos lá (com seus arquivos de exemplo, você só terminaria com uma única cópia do arquivo 00000000000000000000.index , por exemplo).

Ambos os comandos assumem que a opção globstar shell foi definida em bash usando

shopt -s globstar

Isso ativa o padrão ** glob, que corresponderá como * , mas em / em nomes de caminho.

    
por 25.06.2018 / 08:38

Tags