Alguém pode me ajudar a tornar este script mais legível?

0
SRC="/src"
export DEST="/dest"

find "${SRC}" -iname '*' -type f -exec bash -c 'EXT="${0##*.}"; EXT=${EXT,,}; if [[ "${EXT}" == *"/"* ]]; then EXT="no_extension"; fi; mkdir -p "${DEST}/${EXT}"; rsync -a "$0" "${DEST}/${EXT}"' "{}" \;

Este script organiza o SRC para DEST usando find para iterar todos os arquivos na pasta SRC e em cada arquivo encontrado, ele executa o seguinte:

  1. Salva a extensão do arquivo em EXT
  2. Converter EXT em minúsculas
  3. O EXT contém um caractere / ? Se sim, então EXT="no_extension"
  4. Crie uma nova pasta chamada $EXT na pasta $DEST
  5. rsync o arquivo para a pasta que acabou de criar. -a sinalizador para preservação extra.

Eu quero adicionar mais ao script, como uma função para ignorar tipos de arquivo inúteis, mas já é difícil adicionar código.

Como posso reorganizar isso para facilitar o uso?

EDIT: Este não é um trabalho original, mas é modificado por mim. É o único roteiro que eu pude entender que fez o que eu queria. Mas agora quero adicionar mais.

Obrigado!

    
por MALON 29.11.2014 / 00:19

1 resposta

2

Mova todo o comando bash para um script (digamos, em /some/path/sync.sh ):

#! /bin/bash

for i 
do
    EXT="${i##*.}" 
    EXT=${EXT,,}

    if [[ "${EXT}" == *"/"* ]]
    then 
        EXT="no_extension"; 
    fi

    mkdir -p "${DEST}/${EXT}"
    rsync -a "$i" "${DEST}/${EXT}"
done

Em seguida, chame o find assim:

SRC="/src"
export DEST="/dest"

find "${SRC}" -iname '*' -type f -exec /some/path/sync.sh {} +

Agora adicione todas as funções que você deseja.

Em particular, para ignorar extensões de arquivo inúteis, modificar o comando find seria melhor:

find ... ! -regex '.*\.(some|useless|exts)$' ... -exec

(Com alguns escapes de ( e | e uma escolha apropriada de -regextype .)

    
por muru 29.11.2014 / 00:35