Usando find para renomear um diretório no diretório de lixo

0

O seguinte está verificando se há alguma pasta no caminho com mais de 1 dia e que corresponda aos critérios de nome. Se encontrado, a pasta é movida para a pasta 'lixeira'.

find /Users/myname/Desktop/backups/websites/testwebsite.co.uk -maxdepth 1 -type d -mtime +1 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -exec mv {} /Users/myname/Desktop/backups/trash \;

Eu preciso modificar o nome da pasta, para incluir '_renamed' no final.

Eu pensei que eu poderia usar as chaves de mv, mas agora percebo que isso também leva o caminho completo da pasta.

find /Users/myname/Desktop/backups/websites/testwebsite.co.uk -maxdepth 1 -type d -mtime +1 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -exec mv {} /Users/myname/Desktop/backups/trash/{}_renamed \;

Existe alguma maneira de modificar o caminho da pasta sem copiar o caminho também?

    
por ccdavies 17.06.2018 / 16:06

1 resposta

2

Sim, find funciona com nomes de caminho, não com nomes de arquivo.

Existem duas soluções imediatas:

  1. Você pode extrair a parte do nome do nome do caminho e usá-la no nome do caminho de destino usado por mv .

    find /Users/myname/Desktop/backups/websites/testwebsite.co.uk \
        -maxdepth 1 -type d -mtime +1 \
        -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' \
        -exec sh -c 'mv "$1" "/Users/myname/Desktop/backups/trash/${1##*/}_renamed"' sh {} ';'
    

    Aqui, ${1##*/} é o mesmo que $( basename "$1" ) e $1 é o nome do caminho dado ao script sh -c por find .

  2. Você pode usar -execdir no lugar de -exec se a implementação de find oferecer suporte a ela. Com -execdir , o comando dado é executado na pasta pai do item encontrado e {} será o nome da base do item (com BSD find ) ou o nome da base prefixado por ./ (com GNU find ).

    find /Users/myname/Desktop/backups/websites/testwebsite.co.uk \
        -maxdepth 1 -type d -mtime +1 \
        -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' \
        -execdir mv {} /Users/myname/Desktop/backups/trash/{}_renamed ';'
    

Relacionados:

por 17.06.2018 / 16:16