내 이해에서 다음은 정확히 동일해야합니다.
ls -1 | xargs file {}
ls -1 | xargs -I{} file {}
-I 옵션이 지정되지 않은 경우 기본값은 -I {}입니다.
현재 디렉토리의 모든 파일을 나열하고 각 파일에서 file
명령을 실행하고 싶습니다 . 일부는 이름에 공백이 있습니다. 그러나 나는 그 차이를 알아 차렸다. 아래를보십시오 :
$ ls -1
Hello World
$ ls -1 | xargs file {}
{}: ERROR: cannot open `{}' (No such file or directory)
Hello: ERROR: cannot open `Hello' (No such file or directory)
World: ERROR: cannot open `World' (No such file or directory)
$ ls -1 | xargs -I{} file {}
Hello World: directory
-I {}을 명시 적으로 지정하면 파일 이름의 공백이 예상대로 처리됩니다.
3
"-I 옵션이 지정되지 않은 경우 기본값은 -I {}"입니다. 이것은 적어도 GNU xargs에서는 올바르지 않습니다.
—
jjlin
내 실수를 이해합니다. 나도 지정해야
—
foresightyj
xargs file
하거나 xargs -I{} file {}
. 해서는 안됩니다 xargs file {}
. 명시 적으로 -I {}을 지정할 때 bash는 그것을으로 취급합니다 file "Hello World"
. -I {} 없이는로 취급됩니다 file Hello World
.
(1)이 논의는 쉘 (bash)과 관련이 없다. (2)에 대한
—
Scott
-1
옵션을 아는 것이 좋지만 ls
출력이 ls
파일 또는 파이프 인 경우 기본적으로 켜져 있으므로 여기서 필요하지 않습니다. (3) -I
더 이상 사용되지 않는 -i
(소문자 I
) 옵션 과 혼동 됩니다 . -ifoo
는에 해당 -Ifoo
하지만 plain -i
은에 해당합니다 -I{}
. 그러나을 사용하십시오 -I{}
. (4)하고 싶은 말을 정말로하고 싶다면 왜 그렇게 말하지 file *
않습니까?
@Scott 나의 원래 의도는`find를 쓰는 것이었다. -name "* .mov"| 모든 mov 파일을 재귀 적으로 찾아서 실행하려면 xargs -I {} 파일 {}`
—
foresightyj
file
. 그러나 나는를 사용하여 더 간단한 예를 생각해 냈습니다 ls
. 네 말이 맞아 이를 위해 file *
최고입니다.
찾기 가
—
Cristian Ciupitu
-exec
있습니다.