2014-08-29 3 views
2

리눅스/bash는이 입력에서 라인의 목록을 복용하고 각 라인에서 작업 xargs를 사용하여 Cygwin에서 작동만들기 xargs를이

$ ls -1 --color=never | xargs -I{} echo {} 
    xargs: invalid option -- I 
    Usage: xargs [-0prtx] [-e[eof-str]] [-i[replace-str]] [-l[max-lines]] 
      [-n max-args] [-s max-chars] [-P max-procs] [--null] [--eof[=eof-str]] 
      [--replace[=replace-str]] [--max-lines[=max-lines]] [--interactive] 
      [--max-chars=max-chars] [--verbose] [--exit] [--max-procs=max-procs] 
      [--max-args=max-args] [--no-run-if-empty] [--version] [--help] 
      [command [initial-arguments]] 

Cygwin에서 취 2 :

$ ls -1 --color=never | xargs echo 
a b c 

(예, 나는 ls -1 --color=never | while read X; do echo ${X}; done의 보편적 인 방법이 알고, 내가 승 그것을 그 테스트 한 Cygwin에서의 오크도,하지만 난 Cygwin에서 제대로 xargs 일)을 만들 수있는 방법을 찾고 있어요

+0

저에게 맞습니다. 어쩌면 xargs를 업데이트해야합니까? xargs (GNU findutils) 4.5.12 패키지 Cygwin (4.5.12-1) – user3132194

답변

1

사용 -I가 역할을하는 옵션으로, 정말 당신이 사용되어야 하나입니다 xargs-n 인수 인수에게 '이름을'줄 그래서 당신은 그들을 어디서든 명령 행에 표시 할 수 있습니다 :

$ ls -1 --color=never | xargs echo 
a b c 
$ ls -1 --color=never | xargs -n 1 echo 
a 
b 
c 

를 맨 페이지에서 :

-n max-args 
      Use at most max-args arguments per command line 

    -I replace-str 
      Replace occurrences of replace-str in the initial-arguments with names read from standard input. 
+0

자신의 *** Cygwin *** 버전에는'-I' 옵션이 없습니다. 그래서 그는 그 실수를 저지르고 있습니다. 그러나 OP가 원하는 것을하기 위해'-n'을 사용해야한다는 것이 맞습니다.(사실, 그는'find'로 더 나을 것이지만 그것은 또 다른 대답입니다.) –

2

damienfrancois's 대답은 올바른 것입니다. -n을 사용하여 echo을 적용하여 한 번에 하나의 파일 이름을 반향 시키려고합니다. 각 파일을 복용하고 한 번에 그것에게 일을 실행에 정말 관심이 있다면

그러나, 당신은 find를 사용하여 더 나을 수 있습니다

$ find . -maxdepth 1 --exec echo {} \; 

몇 가지 :

  • 이 의지 마침표로 시작하는 파일 이름 선택 ('.'포함)
  • 그러면 파일 이름 앞에 ./이 붙습니다.
  • echo/bin/echo이고 내장 된 쉘 버전의 echo는 사용하지 않습니다.

그러나 ls *을 실행하고 같은 색상의 파일 이름과 같은 가능성을 일으키는 문제 (또는) 당신의 명령이 어떤 작업을 수행하는 (하위 디렉토리에있는 파일을 인쇄 쉘에 의존하지 않습니다.

xargs의 목적은, 특정 명령 실행 최소화이었다., xargsfoo를 실행 시간의 최소 개수를이 경우

$ find . -type f | xargs foo 

foo 만 실행할 때에 통신 라인 버퍼가 가득 차거나 더 이상 파일 이름이 없습니다. 그러나 각 이름 뒤에 실행을 강요하는 경우 find을 사용하는 것이 더 나을 것입니다. 훨씬 더 유연하며 쉘 동작에 의존하지 않습니다.

+1

find는 명령을 쉽게 병렬 처리 할 수 ​​없습니다. http://codereview.stackexchange.com/questions/39377/parallelizing-upload/39383#39383 여전히 가치있는 것들입니다. 팁, 고마워요! – LetMeSOThat4U

+0

'find. -maxdepth 1 -exec echo {} \;''-exec'. – mgaert

+0

@mgaert 고마워요. 정답입니다. –