내 홈 디렉터리(그 안의 모든 하위 디렉터리 포함)에서 처음 100개의 .jpg 파일만 찾아서 복사하려면 어떻게 해야 합니까?

내 홈 디렉터리(그 안의 모든 하위 디렉터리 포함)에서 처음 100개의 .jpg 파일만 찾아서 복사하려면 어떻게 해야 합니까?

나는 다음과 같이 코딩했다.

$ find . -maxdepth 1 -name '*.jpg' | head -n 100 | xargs -0 {} cp {} /home/rachael/backup

오류는 다음과 같습니다.

xargs: {}: No such file or directory

내 코드에 어떤 문제가 있으며 어떻게 수정하나요?

답변1

Steeldriver가 명령에서 몇 가지 문제를 식별했습니다., 그러나 쉘을 사용하여 더 짧은 솔루션을 추가하고 싶었습니다 zsh(질문이 하나의 쉘에만 국한되지 않기 때문에).

cp -- *.jpg(.[1,100]) ~rachel/backup

현재 디렉토리에서 와일드카드 패턴과 일치하는 처음 100개의 일반 파일(사전순)을 복사합니다 *.jpg.

수정 타임스탬프를 기준으로 가장 오래된 100개의 파일의 경우 가장 최근에 수정된 100개의 파일을 가져오려면 대신 *.jpg(.Om[1,100])소문자를 사용하고 사용하세요 . 파일 이름의 숫자 순서를 가져오는 대신 in을 사용 하고 숨겨진 이름과 일치하도록 추가합니다.oOnOmD

답변2

몇 가지:

  1. -I명령에서 수행되는 xargs작업을 알려주는 이 누락되었습니다.{}

  2. -0널로 구분된 입력을 예상 xargs하지만 줄바꿈으로 구분된 입력을 전달하고 있음을 나타냅니다.

그래서

find . -maxdepth 1 -name '*.jpg' -print0 | head -zn 100 | xargs -0 -I{} cp {} /home/rachael/backup

GNU 버전이 있는 경우 cp대체 형식을 사용해야 할 수도 있습니다.

find . -maxdepth 1 -name '*.jpg' -print0 | head -zn 100 | xargs -0 cp -t /home/rachael/backup

관련 정보