Em tcsh
, você pode fazer isso:
foreach i (*)
if ( -e "$i/$i" ) rm -rf "$i/$i"
end
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.
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$