qual é o equivalente do Windows ao Unix '**'

1

Existe uma maneira simples de fazer com que o windows cmd window corresponda a todos os arquivos correspondentes a um padrão, recursivamente , como em

rm **/*.tmp

Veja esta postagem como funciona no Unix

(Eu não tenho certeza se todos os shells do Unix reagem bem a isso, mas pelo menos o bash e o zsh fazem)

    
por PPC 01.11.2016 / 11:19

3 respostas

2

Acho que o equivalente mais próximo é del /S {pattern}

C:\Users\RGB> dir /S/B t
C:\Users\RGB\t\f1.foo
C:\Users\RGB\t\f1.txt
C:\Users\RGB\t\f2.txt
C:\Users\RGB\t\t2
C:\Users\RGB\t\t2\f3.txt
C:\Users\RGB\t\t2\f4.foo

C:\Users\RGB> del /S t\*.foo
Deleted file - C:\Users\RGB\t\f1.foo
Deleted file - C:\Users\RGB\t\t2\f4.foo

C:\Users\RGB> dir /S/B t
C:\Users\RGB\t\f1.txt
C:\Users\RGB\t\f2.txt
C:\Users\RGB\t\t2
C:\Users\RGB\t\t2\f3.txt
    
por 01.11.2016 / 11:31
2

Você pode usar FOR /R para percorrer arquivos / pastas. Leia mais sobre o que você pode fazer com o comando aqui

Por exemplo, para o seu exemplo, seria algo como:

For /R C:\ %G IN (*.tmp) do del "%G"

Se você quiser usar isso em um arquivo em lote, use %%G em vez de %G

    
por 01.11.2016 / 12:05
2

A resposta é: não, não há como fazer isso.

Sua pergunta parece ser sobre como simplesmente usar **, o que pode ser útil em várias circunstâncias.

Isso simplesmente não é suportado no prompt de comando do tipo DOS (CMD.EXE).

Uma coisa importante para entender é que o interpretador de linha de comando (COMMAND.COM no DOS tradicional) na verdade não suporta curingas, e nem o programa CMD embutido no Windows NT, 2K, XP e versões subseqüentes do Microsoft Windows .

O DOS suportava curingas com muitos de seus comandos, como o XCOPY, e até mesmo incluindo alguns comandos, como o DIR, que eram embutidos no shell da linha de comando do DOS. (Dependendo da versão, a exclusão recursiva pode estar disponível com um comando DELTREE externo ou um comando interno, como DEL ou RMDIR.) No entanto, cada comando individual fornecia seu próprio suporte para entender os curingas. O interpretador de linha de comando real simplesmente passou os curingas para os comandos. Então, se você tivesse algum comando que não suportasse curingas (por exemplo, EDIT no DOS ou NOTEPAD no Microsoft Windows), o shell de comando não cuidaria disso para você.

Por outro lado, no Unix, o programa shell interpreta os curingas. Programas individuais geralmente não têm suporte para curingas. Uma exceção que posso pensar é o comando "find". Para permitir que o comando "find" receba um caractere curinga, talvez seja necessário escapar dele. Caracteres que escapam também podem ser úteis sempre que desejarem passar certos símbolos para um programa que suporte "expressões regulares". Esse escape normalmente não é necessário no DOS, porque no DOS, o parâmetro da linha de comando não costuma se misturar com os símbolos que você fornece. (Novamente, o Windows herda o comportamento do DOS, que é resultado de versões anteriores do Windows que se esforçam bastante para serem compatíveis com o DOS.)

Observação: não estou discordando da excelente resposta do pungk , que fornece uma solução prática para muitas circunstâncias. Se você quiser fazer algo recursivamente, isso pode ser uma opção. Estou simplesmente dizendo que você pode precisar fazer algo assim, em vez de apenas usar curingas, porque curingas não são algo interpretados pelo analisador de linha de comando.

Outra opção pode ser usar opções em um programa, como a resposta da RedGrittyBrick , que especifica como excluir arquivos recursivamente em versões modernas do Windows (o que parece apropriado para o seu exemplo de excluir arquivos recursivamente no Unix). Esta é frequentemente a maneira mais fácil de fazer as coisas. No entanto, sua capacidade de fazer isso varia de acordo com o programa que você está usando. No Unix, -R pode ser o mais comum para recursão, com -r sendo o segundo mais comum. No DOS / Windows, o / s é mais comum. No entanto, existem exceções.

Outra opção, claro, pode ser usar um shell Unix no Windows. (Isso é especialmente verdadeiro com uma versão do Windows 10 que possui uma opção interna para instalar um recurso do subsistema Linux, fornecendo uma versão do bash.)

    
por 01.11.2016 / 12:41