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 / 20:52