나는 팔로우하고 있다이 문제여기에 있는 일부 파일 이름에는 파일 이름 시작 부분에 대시가 포함되어 있습니다. 이는 추가 옵션으로 해석됩니다 cp
.
다음과 같은또 다른 질문(ServerFault 관련), 명령을 다음과 같이 변경해 보았습니다.
shuf -zn8 -e *.jpg | xargs -0 cp -vt -- {} target/
또는
shuf -zn8 -e *.jpg -exec cp -vt -- {} target/
소용이 없습니다. -
파일 이름의 시작 부분을 어떻게 처리합니까 ?
답변1
대시로 시작하는 파일 이름을 처리하는 shuf
것 같지 않습니다 . 명령 cp
에 이중 대시를 추가해 보십시오 .shuf
shuf -zn8 -e -- *.jpg | xargs -0I{} cp -vt -- "{}" target/
find
대신 이것을 사용하겠습니다 shuf
.
find . -type f -name '*.jpg' -print0 | xargs -0I{} cp "{}" target/
cp
find
또한 이 경우 접두사가 붙은 파일 이름이 반환되므로 이중 대시가 필요하지 않습니다 ./
.
답변2
이 -t
옵션(GNU 확장)은 대상 디렉터리인 하나의 인수를 사용합니다.
를 사용하면 선택한 파일을 이름이 지정된 디렉터리에 복사 xargs -0 cp -vt -- target/
하려고 시도 하지만 여전히 끝을 표시할 수 있는 옵션이 없습니다. 또한 옵션의 끝을 표시해야 합니다 .target/
--
shuf
{}
find
AND 전용 -exec
술어 또는 AND는 xargs
사용될 때 특별 -I'{}'
하지만 여기서는 필요하지 않습니다. 술어 shuf
가 없습니다 -exec
.
원하는 곳은 다음과 같습니다.
shuf -zen8 -- *.jpg | xargs -r0 cp -vt target --
또는
shuf -zen8 ./*.jpg | xargs -r0 cp -vt target
또한 xpression 기반 정렬 glob 한정자를 zsh
사용할 수도 있습니다 .e
o
cp -v -- *.jpg(oe['REPLY=$RANDOM'][1,8]) target/
shuf
이는 모든 시스템에서 작동하는 접근 방식에 비해 장점이 있으며( zsh
설치된 경우 일부 시스템에서는 비표준을 삭제해야 할 수도 있음 ) 현재 디렉터리에 두 개의 파일이 있어도 -v
실패합니다 (실행이 실패함) .jpg
shuf
너무 많이 논쟁하다실수).