Isso excluirá todas as pastas dentro de ./myfolder
, exceto que ./myfolder/test2
e todo o seu conteúdo será preservado:
find ./myfolder -mindepth 1 ! -regex '^./myfolder/test2\(/.*\)?' -delete
Como funciona
-
find
inicia um comando de localização. -
./myfolder
informa ao find para começar com o diretório./myfolder
e seu conteúdo. -
-mindepth 1
não corresponde a./myfolder
em si, apenas os arquivos e diretórios sob ele. -
! -regex '^./myfolder/test2\(/.*\)?'
informa ao find para excluir (!
) qualquer arquivo ou diretório correspondente à expressão regular^./myfolder/test2\(/.*\)?
.^
corresponde ao início do nome do caminho. A expressão(/.*\)?
corresponde a (a) uma barra seguida por qualquer coisa ou (b) nada. -
-delete
informa ao Google para excluir os arquivos correspondentes (ou seja, não excluídos).
Exemplo
Considere uma estrutura de diretório semelhante a essa:
$ find ./myfolder
./myfolder
./myfolder/test1
./myfolder/test1/dir1
./myfolder/test1/dir1/test2
./myfolder/test1/dir1/test2/file4
./myfolder/test1/file1
./myfolder/test3
./myfolder/test3/file3
./myfolder/test2
./myfolder/test2/file2
./myfolder/test2/dir2
Podemos executar o comando find (sem -delete
) para ver o que corresponde:
$ find ./myfolder -mindepth 1 ! -regex '^./myfolder/test2\(/.*\)?'
./myfolder/test1
./myfolder/test1/dir1
./myfolder/test1/dir1/test2
./myfolder/test1/dir1/test2/file4
./myfolder/test1/file1
./myfolder/test3
./myfolder/test3/file3
Podemos verificar se isso funcionou observando os arquivos que permanecem:
$ find ./myfolder
./myfolder
./myfolder/test2
./myfolder/test2/file2
./myfolder/test2/dir2