O termo "expressão regular" (geralmente) não se aplica
para selecionar arquivos na linha de comando. 1
O termo técnico é expansão do nome do caminho,
mais comumente conhecido como globbing, correspondência de padrões ou expansão com curinga.
Com base no que você disse, uma primeira tentativa de resposta seria
rm -- *[0-9]x[0-9]*
que remove todos os arquivos no diretório atual cujo nome consiste em
- qualquer coisa (
* ), seguido por
- um dígito (
[0-9] ), seguido por
- a letra
x , seguida por
- outro dígito (
[0-9] ), seguido por
- qualquer coisa (
* ).
O -- protege você contra arquivos cujos nomes começam com - .
Eu recomendo strongmente que você faça
ls -ld -- *[0-9]x[0-9]*
primeiro, para ver quais arquivos são correspondidos e serão removidos.
Se você descobrir que está combinando arquivos que não queria,
use *[0-9][0-9][0-9]x[0-9][0-9][0-9]* para obter apenas arquivos que contenham
(pelo menos) um número de três dígitos, x e outro número de três dígitos.
E / ou acrescentar .jpg (no final; por exemplo, usar *[0-9]x[0-9]*.jpg )
para restringir o comando aos arquivos com essa extensão,
e repita o comando com .png .
Como alternativa, use
rm -i -- *[0-9]x[0-9]*
para que rm solicite a confirmação de cada arquivo.
Você mencionou "um diretório que possui diretórios. Todos eles têm jpgs.
Se você precisar pesquisar uma árvore de diretórios, uma abordagem é digitar
shopt -u globstar
e, em seguida, prefixar **/ ao curinga; isto é, adicione-o no começo; por exemplo,
rm -i -- **/*[0-9]x[0-9]*
No entanto, outra maneira de verificar uma árvore de subdiretórios é
find . -name "*[0-9]x[0-9]*" -type f -exec rm -i -- {} +
e você pode "visualizar" este comando (veja quais arquivos ele irá corresponder) digitando
find . -name "*[0-9]x[0-9]*" -type f -print
Novamente, se isso corresponder a muitos arquivos,
você pode adicionar dígitos e / ou adicionar a (s) extensão (s).
Notas:
- Você deve citar o curinga no comando
find .
Você não deve citar o curinga nos outros comandos.
- O comando
find localizará automaticamente os arquivos cujos nomes começam
com . .
Os outros não, a menos que você digite shopt -s dotglob primeiro.
- O comando
find atuará somente em arquivos simples, devido ao -type f .
Os outros irão atuar em diretórios (e outros arquivos especiais)
se o nome deles contiver numberxnumber .
Isso não deve ser um problema para diretórios
desde rm não irá remover diretórios.
Mas, como eu disse, faça o ls primeiro e verifique cuidadosamente a saída,
ou use rm -i e pense antes de digitar y .
por
27.10.2015 / 19:52