Excluir todos os arquivos cujos nomes de arquivos contêm uma sequência específica?

22

Eu mudei meu tema wordpress. O mais antigo criou tantas imagens no servidor. Meu novo tema não precisa deles, então eu quero remover tudo. Como eu posso fazer isso?

Por exemplo:
Imagem padrão:12_angry_men_lone_holdout.jpg

Eu quero excluir:

12_angry_men_lone_holdout-290x166.jpg
12_angry_men_lone_holdout-700x300.jpg 
12_angry_men_lone_holdout-50x50.jpg

Usando o Digitalocean, Ubuntu 13.10.

Ibrahim Mumcu
fonte
em um tipo de terminal man rmpara ver a página de manual do comando rm.
hmayag
Parece que essas imagens são as miniaturas criadas automaticamente a partir de imagens enviadas para a biblioteca de mídia do WorldPress. Nesse caso, não exclua esses arquivos no terminal do servidor. Abra sua página de administração do WordPress, abra 'Configurações'> 'Mídia'. Defina os tamanhos de imagem em miniatura desejados lá. Em seguida, instale o plug-in Regenerar miniaturas e recrie todas as miniaturas (pode levar alguns minutos, dependendo da quantidade de imagens na sua biblioteca de mídia).
Bob

Respostas:

22

Se eles estiverem na mesma pasta, use * curinga para conseguir isso:

rm *text*

Onde textestá a string que contém o nome do arquivo.

myhau
fonte
Na verdade, não é um diretório, mas posso fazer isso um a um por enquanto. Obrigado!
Ibrahim Mumcu
27

Use findpara localizar e excluir recursivamente arquivos com "texto" em seus nomes:

find -type f -name '*text*' -delete

Você também pode querer executar find -type f -name '*text*'(sem o -delete) antes disso para garantir que não exclua nenhum arquivo que não pretendia excluir.


Na verdade, você pode colocar caracteres curinga em qualquer lugar da sequência de pesquisa, para -name '12_angry_men_lone_holdout-*.jpg'que seja mais adequado no seu caso.

n.st
fonte
É que não há necessidade de representar o caminho do arquivo
Avinash Raj
@AvinashRaj Se o primeiro parâmetro não for um caminho, findpesquise no diretório de trabalho atual.
N
Alguém colocou. logo após encontrar para pesquisar dentro do diretório de trabalho atual.
Avinash Raj
1
@AvinashRaj Isso seria redundante. Conforme man find: Se nenhum caminho for fornecido, o diretório atual será usado.
N
@AvinashRaj Acontece que o POSIX especificação para findrealmente não requerem um caminho. O padrão de .é uma modificação adicionada pelo GNU find. Se fosse Unix e Linux , eu acrescentaria isso à minha resposta, mas como o Ubuntu vem com o GNU find por padrão, prefiro não confundir os recém-chegados mais do que o necessário. ;)
n.st 15/11/16
1

Tente o seguinte:

rm -rf 12_angry_men_lone_holdout-*

Isso keep 12_angry_men_lone_holdout.jpgremoverá e removerá os arquivos com dimensões (290x166)

E lembre-se

rm -rf 12_angry_men_lone_holdout.*

também excluirá o arquivo padrão necessário.

Aneesh
fonte
0
find . -type f -name '*[0-9]x[0-9]*' -delete

Execute isso no diretório pai. Isso excluirá todos os arquivos com um dígito seguido de um caractere 'x' seguido de outro dígito em seu nome.

Ainda assim, tenha cuidado, isso também pode excluir arquivos originais, se o nome deles contiver o padrão acima (improvável). Execute-o primeiro sem '-delete' para verificar se você possui arquivos com esse nome. Se for esse o caso, você só precisará encontrar um padrão mais restritivo.

Tamas
fonte