한 디렉터리에서 다른 디렉터리로 처음 1000개의 파일만 복사할 수 있습니까?
미리 감사드립니다
답변1
다음은 현재 디렉터리에서 찾은 처음 1000개의 파일 을 $destdir
.find
$ find . -maxdepth 1 -type f |head -1000|xargs cp -t "$destdir"
cp
for 의 GNU 구현, 즉 for -t
의 GNU 호환 버전이 필요합니다 . 또한 파일 경로에 공백, 개행, 따옴표 또는 백슬래시(또는 잘못된 문자 또는 일부 구현에서는 255바이트보다 길다)가 포함되어 있지 않다고 가정합니다.find
-maxdepth
xargs
편집하다:공백, 개행 문자, 따옴표 등이 포함된 파일 이름을 처리하려면 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 트위스트 누락). 물론 파일 이름이 정상이라면 쉘에는 문제가 없습니다.
편집: 파일만 복사하는 확인 기능을 추가했습니다.