Como excluo com segurança todos os arquivos com uma extensão específica (por exemplo .bak
) do diretório atual e de todas as subpastas usando uma linha de comando? Simplesmente, tenho medo de usá-lo, rm
pois o usei errado uma vez e agora preciso de conselhos.
command-line
files
rm
batch
user216038
fonte
fonte
rm *.bak
?rm *.bak
não funcionará para subdiretórios.rm *.bak
, somente os arquivos que terminam com .bak são excluídos no diretório atual. Para também fazer coisas em subdiretórios, você precisa mexer nos globs, usar a opção -r ou o exemplo de localização.rm -r *.bak
! Ele também remove os diretórios que terminam.bak
com todo o seu conteúdo.-delete
é o último argumento em seu comando. Se você o colocar antes do-name *.bak
argumento, ele excluirá tudo.fonte
-delete
bandeira defind
. Mais informações podem ser encontradas na entrada de manuais GNU para excluir arquivos com o find .Primeiro, execute o comando
shopt -s globstar
. Você pode executar isso na linha de comando, e isso terá efeito apenas nessa janela do shell. Você pode colocá-lo no seu.bashrc
e, em seguida, todos os shells recém-iniciados o buscarão. O efeito desse comando é tornar**/
os arquivos de correspondência no diretório atual e em seus subdiretórios recursivamente (por padrão,**/
significa o mesmo que*/
: somente nos subdiretórios imediatos). Então:(ou
gvfs-trash **/*.bak
ou o que você tem).fonte
Excluir arquivos não é para mim algo para o qual você deve usar
rm
. Aqui está uma alternativa:Como afirma Flimm nos comentários:
Assim:
Você não precisa criar um alias para isso, porque o
trash-cli
pacote fornece um comandotrash
, que faz o que queremos.Como Eliah Kagan deixa claro em extensos comentários, você também pode fazer esse uso recursivo
find
. Nesse caso, você não pode usar um alias; portanto, os comandos abaixo assumem que você instaloutrash-cli
. Resumo os comentários de Eliah:Este comando localiza e exibe todos os
.bak
arquivos e links simbólicos em qualquer lugar do diretório atual ou de seus subdiretórios ou abaixo.Para excluí-los, adicione um
-exec
com otrash
comando:-xtype f
seleciona arquivos e links simbólicos para arquivos, mas não pastas. Para excluir também pastas .bak, remova essa parte e use-execdir
, o que evitacannot trash non-existent
erros de.bak
arquivos dentro de.bak
diretórios:fonte
rm
para excluir coisas" é uma declaração controversa, mas eu tenho que concordar que geralmente é mais sábio usar algo que permita desfazer as coisas.trash-cli
faz a mesma coisa quegvfs-trash
sem a dependênciagvfs
.find . -name "*.bak" -type f
quetrash *.bak
exclui. É isso mesmo o que você quer dizer? Você pode mover diretórios para a lixeira comtrash
ougvfs-trash
, mastrash *.bak
somente move arquivos e diretórios cujos nomes terminam com.bak
e que residem imediatamente no diretório atual. O shell se expande e*.bak
, portantotrash *.bak
, não afeta os.bak
arquivos nos subdiretórios que não são nomeados.bak
.ls *.bak
(o que eu acho que você quer dizer) lista ostrash *.bak
trashes.find . -name '*.bak' -xtype f -exec trash {} +
trash todos os.bak
arquivos em qualquer lugar abaixo.
. Ele não pode usar um alias; portanto, instaletrash-cli
ou escrevagvfs-trash
. Aqui está um exemplo.-xtype f
seleciona arquivos e links simbólicos para arquivos, mas não pastas. Para excluir.bak
pastas também, usefind . -name '*.bak' -execdir trash {} +
, o que evitacannot trash non existent
erros de.bak
arquivos dentro de.bak
diretórios. Por favor, sinta-se à vontade para usar isso na sua resposta.Se você deseja excluir todos os arquivos de um determinado tipo, mas apenas 1 pasta "profunda" da pasta atual:
-maxdepth 2 porque o diretório atual " . " conta como a primeira pasta.
fonte
Resposta rápida:
Exclua todos os arquivos com o nome considerado ou o postfix recursivamente:
find . -name '*.pyc' -type f -delete
Exclua todos os diretórios com o nome considerado recursivamente:
Um pouco menos rigidamente controlado, mas em uma única linha:
[ NOTA ]:
d
é a opção de diretório ef
é a opção de arquivo.fonte
Se você estiver dentro de um repositório git, poderá usar:
Isso exclui arquivos e arquivos não rastreados no .gitignore.
fonte