Você pode usar find
com um argumento type
.
find . -maxdepth 1 -type f -exec rm -f {} \;
Você pode executar uma execução a seco removendo a parte -exex rm -f {} \;
para ver os arquivos que seriam excluídos.
Suponha que haja uma pasta que tenha arquivos, links simbólicos e subdiretórios da seguinte forma:
files: file1, file2, file3, file4
symbolic links: link1-->file2, link2-->file3
subdirectories: dir1, dir2
Eu quero excluir arquivo1, arquivo3, arquivo3, arquivo4, link1 e link2. Mas deixe dir1 e dir2 inalterados.
Observe que não há um padrão como file*
pode cobrir o nome de todos os arquivos. O nome dos arquivos acima são apenas por exemplo e, na verdade, o nome deles é diferente.
A maneira simples é usar
$ rm ./*
Aqui não estamos usando a exclusão recursiva ( -r
) e, portanto, somente os arquivos (exceto os ocultos) no diretório pai devem ser excluídos.
Usando o bash (e ignorando links simbólicos):
for file in *; do [[ -f $file ]] && rm -- "$file"; done
com zsh
:
rm -- *(.)
remove apenas os arquivos regulares
rm -- *(D.)
para incluir também arquivos de pontos (ocultos)
rm -- *(D^/)
remove todos os tipos de arquivos, exceto diretórios (que incluem links simbólicos para diretórios)
rm -- *(D^-/)
remove todos os tipos de arquivos, exceto diretórios e links simbólicos para diretórios (isso removeria links simbólicos para diretórios, se não puder determinar o tipo de destino do link simbólico).
O equivalente em% GNUfind
desse último seria:
find . -maxdepth 1 ! -xtype d -delete
sudo mkdir a b c d e
sudo touch a/1 b/2 c/3 d/4 e/5 e/a e/b
ls
a b c d e pqr xyz
cd a/
ls
1
cd ../e/
ls
5 a b
cd /var/warehouse/abc/
find . -type f ! -path "./a*" ! -path "./b*"
./d/4
./e/a
./e/b
./e/5
./c/3
sudo find . -type f ! -path "./a*" ! -path "./b*" -exec rm -f {} \;