ls * (별표) 디렉토리 와일드 카드와 동등한 Windows?


14

Windows 세계에서 자신을 발견 한 오랜 유닉스 / 리눅스 사용자의 또 다른 질문. 먼저 내가하려는 일을 정확하게 설명하겠습니다. Windows cmd.exe 셸을 사용하고 있으며 bin \ Debug 계층 구조를 포함하는 현재 디렉토리 아래의 모든 디렉토리를 나열하고 파일이 포함되어 있는지 확인합니다 (예 : NAnt 정리 대상이 제대로 작동). 내 계층 구조는 다음과 같습니다.

\Current
    \DirA
         \bin
             \Debug
                  (some files under debug)
             \Release
    \DirB
         \bin
             \Debug
    \DirC
         \bin
             \Release

유닉스에서는 ls */bin/Debug의 모든 것들에 대한 목록을 제공하고 비어 DirA/bin/Debug있는 사실을 보여줄 것 DirB/bin/Debug입니다. cmd 쉘에서 다른 변형을 시도했지만 다음과 같은 것들로 계속 와인딩됩니다.

    > dir * \ bin \ Debug
    파일 이름, 디렉토리 이름 또는 볼륨 레이블 구문이 올바르지 않습니다.

    > dir * \ * \ *
    파일 이름, 디렉토리 이름 또는 볼륨 레이블 구문이 올바르지 않습니다.

dir 명령에 대해 이해하지 못하는 미묘한 것이 있습니까? 아니면 그렇게 제한되어 있습니까?

예, 탐색기로 전환하고 탐색하고 마우스 오른쪽 버튼을 클릭하여 원하는 결과를 얻는 검색을 만들 수 있다는 것을 알고 있지만 quick-n-dirty 명령 줄 솔루션에 더 관심이 있습니다.


Windows에 추가 할 수있는 모든 유닉스 계열 도구에 대해 아는 것이 좋지만 (집에서 Cygwin을 사용한다고 생각합니다!), 어디를 가든 항상 사용할 수있는 것은 아닙니다 (실제로 관리자 권한이 없을 수도 있습니다) 내가 사용하는 모든 PC에 설치하십시오).
오우거 시편

답변:


13

이와 같은 것이 원하는 것을해야합니다. 프로젝트 유형의 루트 디렉토리에서 :


c:\path\to\slndir>dir *.dll *.exe /s /b | findstr /i "bin\debug"

dir 인수 : / s-재귀, / b- "베어", 추가 정보가 없습니다
: / i-대소 문자 무시

일반적으로 'help command '는 쉘 명령에 대한 도움말을 표시합니다. 그래도 작동하지 않으면
' command /?' 일반적으로 도움을 보여줍니다.


우수한! Windows를 "리눅스 화"하는 데 도움이되는 많은 도구 / 툴킷이 있다는 것을 알고 있지만, 내가하려는 일을하는 Windows 방법을 찾고있었습니다. 이것이 바로 그 것입니다!
오우거 시편 33 년

7

Windows는 Linux처럼 와일드 카드를 사용하지 않습니다. 파일 이름 부분에만 와일드 카드를 포함 할 수 있습니다.

Windows에서 실행되는 ls 버전을 다운로드하여 사용할 수 있습니다. Cygwin을 사용 했지만 다른 것이 있다고 확신합니다.


또한 PowerShell
Joel Coehoorn이

3
명심해야 할 또 다른 사항 : Windows에서 와일드 카드는 셸이 아닌 명령으로 확장됩니다.
Laurence Gonsalves

2

unxutils 에는 ls 명령이 있습니다. 그러나 문제는 실제로 Windows 셸에 있습니다. 유닉스에서는 셸이 */bin/Debug관련 경로 이름으로 확장 되어 별도의 명령 줄 인수로 ls 명령에 제공됩니다.

Cygwin은 확실히 당신을 위해 속임수를 쓰거나 bash 와 같은 유닉스 쉘의 Windows 포트를 사용해 볼 수 있습니다. 스크립팅 경로를 원한다면 glob 모듈을 사용하여 파이썬으로 무언가를 쉽게 코딩 할 수 있으며 대부분의 다른 스크립팅 언어는 동등합니다.


2

"dir / s * .obj * lib"와 같은 것을 할 수 있습니다. 일치하는 파일 수의 끝에 요약을 제공합니다.


닫기. 나는 당신에게 소품을 주었지만 James의 대답은 \ debug 아래에 없는 파일을 필터링하기 때문에 더 가깝 습니다.
오우거 시편 33

2
@for /D /r %P in (.) do @for %Q in ("%~fP\bin\Debug\*") do @echo %~ftzaQ

좋지는 않지만 작동해야합니다. .cmd 파일에 넣을 수도 있습니다 (모든 단일 %를 이중 %%로 바꿉니다). 또는 doskey를 사용하여 매크로를 정의하십시오 (예, 여전히 존재합니다).

cmd 확장자가 사용 가능한지 확인하십시오.

편집 : 작동 방식 :

첫 번째 for 루프는 모든 하위 디렉토리 (/ D 및 / r 스위치)를 반복적으로 반복합니다. % ~ fP는 해당 디렉토리의 전체 경로로 확장됩니다. 그런 다음 \ bin \ Debug *를 해당 경로에 추가합니다. 두 번째 for 루프는 일치하는 모든 파일을 열거합니다. % ~ ftzaQ는 모든 파일 일치로 확장되고 화면에 에코로 인쇄됩니다. 이상한 % ~ ftzaQ는 dir 출력처럼 형식화합니다. @ 문자는 명령 자체가 화면에 인쇄되지 않도록합니다.

자세한 내용은


나는 이것을 시도했고 실제로 작동합니다. 그러나 cmd 쉘에서 다소 경험이 없기 때문에 아직 완전히 이해하지 못했습니다 :-).
오우거 시편 33 년

0

Windows 환경에서 cmd.exe는 와일드 카드를 확장하지 않습니다. 명령 줄 또는 argv 배열의 그대로 프로그램에 그대로 전달됩니다. 따라서 각 프로그램은 그것들을 다르게 구문 분석하고 확장하며, 당신이 찾고있는 것과 같은 고급 사용은 일반적으로 지원되지 않습니다.

Cygwin 사용에 대한 timgilbert의 제안 은 좋은 것이며 GNUWin32 패키지 도 도움이 될 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.