Eu gostaria de executar uma linha de comando:
cd ~/www/tmp/; rm -P 2*
Mas recebo um erro se não houver arquivos começando com 2.
Você pensaria que eu gostaria de usar -f
, no entanto:
-f Attempt to remove the files without prompting for confirmation, regardless of the file's permissions. If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error.
E eu faço o cuidado sobre o arquivo permissions- se há algo estranho acontecendo, eu prefiro o comando abortar. Eu só quero suprimir erros 'não existem'.
Examinei algumas outras perguntas com 'erros rm' e encontrei essas duas que parecem (um pouco) relevantes:
Exclua arquivos e diretórios por seus nomes. Não existe tal arquivo ou diretório
Mas não entendo tudo o que está acontecendo nas respostas a essa pergunta e não sei se preciso disso?
O touch
hack sugerido nesta pergunta:
A rm não informou quando um arquivo está faltando?
Parece viável, pois acho que não me importo com o impacto no desempenho (mas que tipo de impacto você levaria? - ou seja: essa é uma técnica razoavelmente escalável ou estou apenas aprendendo hábitos muito ruins?)
Não tenho certeza de como eu faria if-then
dentro da linha de comando.
Existem outras opções para uma limpeza simples da linha de comando cut-n-paste?
Funcionaria find -delete
melhor para o meu caso? Se sim, por quê?
erro em questão:
rm: 2*: No such file or directory
fonte
rm
, então você precisará dizer o que é isso.zsh
como seu shell interativo? Você está recebendo umNo matches found
erro?2*
para rm em vez de expandi-la para uma lista de arquivos. Olhe para o erro em questão: ele diz que rm está reclamando, não sh / bas / zsh / ...Respostas:
Para chamar única
rm -P
para existente arquivos regulares cujos nomes coincidem com um padrão em um diretório (mas não abaixo):Por exemplo,
Para corresponder apenas aos não diretórios, use
! -type d
no lugar de-type f
. A diferença é que isso! -type d
seria verdade para uma ampla variedade de tipos de arquivos (links simbólicos, pipes nomeados, soquetes etc.)Desde que você quer ser solicitado para algumas condições sobre os arquivos encontrados, você deve não usar
-delete
, em vez de-exec rm
uma vez que funciona comorm -f
.Remova
-maxdepth 1
para permitir afind
recursividade nos subdiretórios.fonte
! -type d
possa estar mais pertorm 2*
, eu acho?find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +
-P
.-type f
, mas não sabia comorm
agir assim - então a sugestão de @ Kusalanada foi imediata, e a diferenciação / explicação é ótima para aprender.rm 2*(.)
no zsh).