Como apagar todas as pastas que possuem o mesmo nome de sua pasta pai?

2

De alguma forma eu tenho uma cópia de cada pasta dentro de si.

Qual é o comando shell que eu posso executar para excluir todas as pastas que estão dentro de pastas com o mesmo nome?

Por exemplo, acima, executando o comando do pai de lnp_eventbrite e libraries , exclua somente as pastas lnp_eventbrite e libraries em si.

    
por lukemh 18.12.2012 / 07:28

2 respostas

3

Em tcsh , você pode fazer isso:

foreach i (*)
   if ( -e "$i/$i" ) rm -rf "$i/$i"
end
    
por 18.12.2012 / 07:36
1

Se você deseja excluir subdiretórios correspondentes, é necessário ter certeza de que 1) está vazio 2) é um diretório com o mesmo nome de seu pai. E você precisa começar do mais profundo (ex: A / A / A / A / A /: comece com o mais abaixo um.

Aqui está uma maneira de fazer isso no bash + grep + find (os mais básicos, como eu testo em uma máquina antiga):

recdeldir ()
{
    _tab_="'printf '1''";
    find . -type d -depth -print | grep -v '^\.$' | while IFS= read dir; do
        echo "======= $dir =============";
        pushd "${dir}";
        if [ -d "../../'basename ${dir}'" ]; then
            echo "Matching subdir: 'pwd'";
            if ( find . -print | grep -v '^\.$' | wc -c | grep "[ ${_tab_}]*0$" >/dev/null ); then
                echo "empty, deleting 'pwd'/";
                cd ..;
                rmdir "'basename ${dir}'";
            else
                echo "'pwd'/ is not empty. doing nothing.";
            fi;
        else
            echo "Not matching subdir : 'pwd'";
        fi;
        popd;
    done
}

E aqui está um exemplo de uso desta função: Eu criei um /tmp/DIR , e dentro dele eu criei um pouco de um caso de teste (com vários dir com o mesmo nome, alguns começando com ".", e em alguns deles eu adicionei outros arquivos para garantir que eles não serão excluídos e são levados em conta, etc.

Em outras palavras, certifique-se de que o script NÃO exclua um subdiretório que corresponda ao nome do diretório do pai, caso esse subdiretório não esteja vazio, garantindo que não excluamos as coisas que não devemos excluir (acredito que esteja de acordo com o script). desejo do solicitante). Se devemos excluir independentemente do conteúdo / emtyness, modificações devem ser feitas para que não se importe com a diferença "vazio / não vazio".

Na sua sessão bash, apenas copie / cole esta função acima para criá-la no seu shell atual (ou adicioná-la a um arquivo que você irá encontrar ou ao seu bashrc) e então você pode usá-la:

Eu então cd em /tmp/DIR e lancei: recdeldir

bash-2.05b$ find . -ls
 8192    1 drwxrwxr-x  5 user      group          256 Dec 18 12:03 .
 8193    1 drwxrwxr-x  3 user      group          256 Dec 18 11:31 ./tre
 8194    0 -rw-rw-r--  1 user      group            0 Dec 18 11:31 ./tre/sdfsd
 8195    0 -rw-rw-r--  1 user      group            0 Dec 18 11:31 ./tre/sdfsdq
 8196    1 drwxrwxr-x  2 user      group          256 Dec 18 12:10 ./tre/tre
 8199    0 -rw-rw-r--  1 user      group            0 Dec 18 11:31 ./tre/tre/i
 8200    1 drwxrwxr-x  3 user      group          256 Dec 18 12:11 ./.O
 8203    1 drwxrwxr-x  3 user      group          256 Dec 18 12:11 ./.O/.O
 8204    1 drwxrwxr-x  2 user      group          256 Dec 18 12:11 ./.O/.O/.O
 8205    0 -rw-rw-r--  1 user      group            0 Dec 18 12:11 ./.O/.something
 8201    1 drwxrwxr-x  3 user      group          256 Dec 18 12:11 ./.OOO
 8198    1 drwxrwxr-x  3 user      group          256 Dec 18 12:11 ./.OOO/.OOO
 8202    1 drwxrwxr-x  2 user      group          256 Dec 18 12:11 ./.OOO/.OOO/.OOO
 8197    1 -rw-rw-r--  1 user      group          967 Dec 18 12:11 ./result
bash-2.05b$ recdeldir
======= ./tre/tre =============
/tmp/DIR/tre/tre /tmp/DIR
Matching subdir: /tmp/DIR/tre/tre
/tmp/DIR/tre/tre/ is not empty. doing nothing.
/tmp/DIR
======= ./tre =============
/tmp/DIR/tre /tmp/DIR
Not matching subdir : /tmp/DIR/tre
/tmp/DIR
======= ./.O/.O/.O =============
/tmp/DIR/.O/.O/.O /tmp/DIR
Matching subdir: /tmp/DIR/.O/.O/.O
empty, deleting /tmp/DIR/.O/.O/.O/
/tmp/DIR
======= ./.O/.O =============
/tmp/DIR/.O/.O /tmp/DIR
Matching subdir: /tmp/DIR/.O/.O
empty, deleting /tmp/DIR/.O/.O/
/tmp/DIR
======= ./.O =============
/tmp/DIR/.O /tmp/DIR
Not matching subdir : /tmp/DIR/.O
/tmp/DIR
======= ./.OOO/.OOO/.OOO =============
/tmp/DIR/.OOO/.OOO/.OOO /tmp/DIR
Matching subdir: /tmp/DIR/.OOO/.OOO/.OOO
empty, deleting /tmp/DIR/.OOO/.OOO/.OOO/
/tmp/DIR
======= ./.OOO/.OOO =============
/tmp/DIR/.OOO/.OOO /tmp/DIR
Matching subdir: /tmp/DIR/.OOO/.OOO
empty, deleting /tmp/DIR/.OOO/.OOO/
/tmp/DIR
======= ./.OOO =============
/tmp/DIR/.OOO /tmp/DIR
Not matching subdir : /tmp/DIR/.OOO
/tmp/DIR
bash-2.05b$ find . -ls
 8192    1 drwxrwxr-x  5 user      group          256 Dec 18 12:03 .
 8193    1 drwxrwxr-x  3 user      group          256 Dec 18 11:31 ./tre
 8194    0 -rw-rw-r--  1 user      group            0 Dec 18 11:31 ./tre/sdfsd
 8195    0 -rw-rw-r--  1 user      group            0 Dec 18 11:31 ./tre/sdfsdq
 8196    1 drwxrwxr-x  2 user      group          256 Dec 18 12:10 ./tre/tre
 8199    0 -rw-rw-r--  1 user      group            0 Dec 18 11:31 ./tre/tre/i
 8200    1 drwxrwxr-x  2 user      group          256 Dec 18 12:11 ./.O
 8205    0 -rw-rw-r--  1 user      group            0 Dec 18 12:11 ./.O/.something
 8201    1 drwxrwxr-x  2 user      group          256 Dec 18 12:11 ./.OOO
 8197    1 -rw-rw-r--  1 user      group          967 Dec 18 12:11 ./result
bash-2.05b$
    
por 18.12.2012 / 12:18

Tags