O mais próximo que cheguei é
# rm /path/to/directory/*.*
mas isso não funciona para arquivos que não têm extensão ...
O mais próximo que cheguei é
# rm /path/to/directory/*.*
mas isso não funciona para arquivos que não têm extensão ...
Respostas:
O Linux não usa extensões. Cabe ao criador do arquivo decidir se ele deseja que o nome tenha uma extensão. O Linux analisa o primeiro byte para descobrir com que tipo de arquivo ele está lidando.
Para remover tudo em um diretório, use:
rm /path/to/directory/*
Você pode usar a -r
opção, por exemplo:
rm -r /path/to/directory/*
para remover também qualquer subdiretório (junto com todo o seu conteúdo) dentro do diretório do qual você está removendo. Caso contrário, ele mostrará um erro informando que você não está removendo o diretório.
all files
;) *.*
significa todos os arquivos que contêm um .
lugar no nome
*a*
significa zero ou mais caracteres, a
seguido por zero ou mais caracteres. Ele iria coincidir com os nomes de arquivos happy
, apple
, a
ou la
.
Para remover a pasta com todo o seu conteúdo ( incluindo todas as pastas internas ):
rm -rf /path/to/directory
Para remover todo o conteúdo da pasta ( incluindo todas as pastas internas ), mas não a própria pasta:
rm -rf /path/to/directory/*
ou
rm -rf /path/to/directory/{*,.*}
se você quiser garantir que arquivos / diretórios ocultos também sejam removidos.
Para remover todos os "arquivos" de dentro de uma pasta ( sem remover as pastas internas ):
rm -f /path/to/directory/{*,.*}
Aviso : se você tiver espaços em seu caminho, sempre use aspas.
rm -rf /path/to the/directory/*
é equivalente a 2 rm -rf
chamadas separadas :
rm -rf /path/to
rm -rf the/directory/*
Para evitar esse problema, você pode usar '
aspas simples '
( não expande variáveis de shell) ou "
aspas duplas "
( expande variáveis de shell):
rm -rf "/path/to the/directory/"*
Onde:
rm
- significa " remover "-f
- significa " force ", que é útil quando você não deseja ser solicitado / solicitado se deseja remover um arquivo, por exemplo.-r
- significa " recursivo ", o que significa que você deseja descer recursivamente todas as pastas e remover tudo.rm -rf /path/to/directory/*
não remove um arquivo oculto na pasta, por exemplo .htaccess
. Talvez rm -rf /path/to/directory/.
? Ainda não tentei.
rm -rf /path/to/directory/.*
exclui apenas os arquivos ocultos no diretório especificado. Observando o comentário de @ danjjl na resposta de @ Rinzwind, também para excluir arquivos ocultos, execute shopt -s dotglob
antes de executar rm -rf /path/to/directory/*
.
rm -rf /path/to/directory/.*
no meu sistema causou a exclusão de itens no /path/to
. Felizmente, eu tinha acabado de fazer backup de todos os meus dados em um disco separado. Escusado será dizer que NÃO emita o comando, a rm -rf /path/to/directory/.*
menos que você tenha feito backup de todo o computador em um local separado / seguro!
Para remover todos os arquivos no diretório (incluindo arquivos ocultos e subdiretórios), execute:
rm -rf /path/to/directory/{*,.*}
./
e ../
, mas ainda excluirá os arquivos ocultos.
rm -r $(pwd)/{*,.*}
Se você deseja excluir apenas arquivos no diretório / path / to /, você pode
find /path/to/directory -type f -print0| xargs -0 rm
ou
find /path/to/directory -type f -exec rm '{}' \;
Você pode fazer cargas com find
, a vantagem é que você pode listar o que é encontrado sem direcioná-lo para rm
que você possa ver o que será excluído antes de começar.
GNU find
como um -delete
predicado. Se você ainda deseja usar -exec
, a substituição \;
por +
reunirá as rm
chamadas, aumentando a eficiência.
Para excluir todos os arquivos e diretórios (incluindo os ocultos ) em um diretório, você pode tentar o seguinte:
exclua a pasta e recrie-a
rm -rf dir_name && mkdir dir_name
usar find
find dir_name -mindepth 1 -delete
Aqui, especificamos -mindepth 1
para excluir o diretório dir_name em si.
Dê uma olhada no seguinte link:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
Se você também deseja remover todos os subdiretórios e o próprio diretório, pode usar rm -rf /path/to/directory
. Mas sempre verifique sua linha antes de pressionar return, também rm -rf
pode causar muitos problemas, por exemplo, se você inserir acidentalmente um espaço após a primeira barra com permissões de superusuário ...
Como essa pergunta está constantemente no topo do Google, quando eu procuro por mim mesma:
As outras respostas sofrem de diferentes problemas:
Alguns deles incluem .
e ..
que é barulhento, confuso e irritante.
Alguns deles esquecem arquivos ocultos (arquivos começando com um ponto).
Eles não são excluídos na ordem correta (mais profunda) para permitir a exclusão do diretório.
Eles descem para outros sistemas de arquivos (montados), o que geralmente é indesejável.
Eles são difíceis de estender corretamente com parâmetros extras (mais sobre isso abaixo).
find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
Observe que eu adicionei um -xdev
argumento para impedir a descida para montagens (como /proc
etc.).
-depth
ou -delete
?Apesar de as pessoas me recusarem constantemente por isso, esses métodos têm uma desvantagem: não parece extensível o suficiente para permitir -prune
um subdiretório (sem introduzir mais problemas). Em contraste com esse método, você pode inserir
-not \( -path "${DIR}/subdir" -prune \)
antes do -mindepth
argumento para excluir subdir
o conteúdo excluído.
-depth
bandeira find
para isso.
-delete
comfind
? -delete
é profundidade primeiro. Você já está assumindo não-POSIX find
com o -printf
, então você poderia muito bem usar -delete
ou-depth -print0 | xargs -0 rm
-not \( -path "$DIR/subdir" \)
... mas o meu funciona? Por quê?
shopt -s dotglob
antes de executarrm (...)