처음 n개 파일을 다른 디렉터리에 복사

처음 n개 파일을 다른 디렉터리에 복사

중복 가능성:
수천 개의 파일이 포함된 폴더에서 100개의 파일을 이동하는 방법은 무엇입니까?

한 디렉터리에서 다른 디렉터리로 처음 1000개의 파일만 복사할 수 있습니까?

미리 감사드립니다

답변1

다음은 현재 디렉터리에서 찾은 처음 1000개의 파일 을 $destdir.find

$ find . -maxdepth 1 -type f |head -1000|xargs cp -t "$destdir"

cpfor 의 GNU 구현, 즉 for -t의 GNU 호환 버전이 필요합니다 . 또한 파일 경로에 공백, 개행, 따옴표 또는 백슬래시(또는 잘못된 문자 또는 일부 구현에서는 255바이트보다 길다)가 포함되어 있지 않다고 가정합니다.find-maxdepthxargs

편집하다:공백, 개행 문자, 따옴표 등이 포함된 파일 이름을 처리하려면 null로 끝나는 줄을 사용해야 할 수도 있습니다(버전에 head해당 -z옵션이 있다고 가정).

find . -maxdepth 1 -type f -print0 | head -z -n 1000 | xargs -0 -r -- cp -t "$destdir" --

답변2

순수 쉘 솔루션( cp여러 번 호출됨)

N=1000;
for i in "${srcdir}"/*; do
  [ "$((N--))" = 0 ] && break
  cp -t "${dstdir}" -- "$i"
done

그러면 에서 으로 최대 $N파일 수가 복사됩니다 . 점으로 시작하는 파일은 생략됩니다. (내가 아는 한, 선택한 파일 세트가 결정적이라는 보장은 없습니다.)$srcdir$dstdir

답변3

끔찍한 내용은 다음과 같습니다.

perl -MFile::Copy -e 'opendir(DIR,$ARGV[0]);$n=1000; (-f $_) && copy($_,"$ARGV[1]/$_") while($n-- && readdir(DIR)) 

쉘 기반 솔루션을 손상시키는 경향이 있는 공백, 따옴표 등을 포함하는 파일에 작동합니다($IFS 트위스트 누락). 물론 파일 이름이 정상이라면 쉘에는 문제가 없습니다.

편집: 파일만 복사하는 확인 기능을 추가했습니다.

관련 정보