Exclui recursivamente todos os arquivos .exe com o mesmo nome da pasta que os contém

2

Eu quero excluir todos os arquivos .exe da pasta atual e todas as subpastas.

Eu li que find . -name "*.exe" -exec rm -f '{}' \; serve, mas quero fazer a exclusão apenas se a pasta do contêiner tiver o mesmo nome que o .exe.

Exemplo:

/me/folder1/folder1.exe    - delete folder1.exe
/me/folder 2/folder 2.exe  - delete 'folder 2.exe'
/me/folder3/otherexe.exe   - do not delete otherexe.exe
    
por xthink 10.09.2013 / 11:07

1 resposta

3

Execute isso no Bash. Ele itera sobre todos os arquivos .exe e compara o nome do diretório pai com o nome do arquivo (sem extensão).

shopt -s extglob
for f in **/*.exe; do
    dir="$(basename "$(dirname "$f")")"  # get dirname
    file="$(basename "${f%.*}")"         # get filename, without extension
    if [ "$dir" = "$file" ]; then
        rm -i -- "$f"
    fi
done

O truque para obter o nome do diretório bruto é chamar basename no dirname do arquivo. Todas as substituições precisam ser citadas para que esse comando funcione com nomes de arquivos contendo espaço em branco.

Se você não quiser ser avisado antes de remover arquivos, remova a opção -i da chamada rm .

    
por 10.09.2013 / 11:41