2016-08-12 2 views
1

의 복사본을 제공하는 동안 다음 스크립트를 사용하여 샘플 이름을 기반으로 다양한 디렉토리에있는 파일 목록을 복사하려고합니다. 파일이 복사 되더라도 파일은 부분적으로 만 복사됩니다. 나는 각 파일에 64k 라인을 가지고 있지만 정확히 정확히 40k 라인 만 복사된다.루프 cp가 부분 파일 (리눅스)

while read sample 
do 
echo copying ${sample} 
cp ${sample_dir}/*${sample}*/file.tsv ${output_dir}/${sample}.file.tsv 
done < ${input_list}/sample_list.txt 

내가 여기에 분명한 뭔가를 놓치고 있습니까? cp 명령에 복사 할 수있는 줄 수에 제한이 있습니까? 이 새로운 파일 생성에 관련이 있는지

건배,

+0

멀티 매치가 있어도, 그 일부 사본을 일으킬 안된다 디렉토리가 아닌 대상에 대한 오류 만 가져와야합니다. – chepner

+0

나는 어떤 오류도 발생하지 않는다고 덧붙여 야한다. 나는 정보가 빠져 있다는 것을 깨달았을 때 경쟁 사본이 아니라는 사실만을 알아 차렸다. 여러 경기가 없어야하며 단순한 복사 작업이어야합니다. –

+0

'$ {sample_dir}/* $ {sample} */file.tsv'는 정확히 하나의 파일을 제공합니까? –

답변

0

내가 CP 명령 생각하지 않는다는 (ulimit를이 제한을하지 않는 한)을 복사하지만 복사하거나 검사 할 파일의 수에 제한이하는 파일 크기에 제한이 큰 크기. 명령 ulimit를 사용하여 시스템에서

체크 제한

ulimit -a 

그리고 파일 크기를 확인할 수는 40K로 제한하고 그 다음 어떤 문제에 제한이없는 경우 (같은 파일 크기 (블록, -f) 제한되지 않는다).

당신을 위해 작동하는 경우가 읽기 오류 파일 있지 않다면 고양이처럼 파일 확인),

rsync -avh source destination 

당신이 몇 가지를 확인 할 수 rsync를 명령

일을 시도하고 출력을 저장 다른 파일 (수동/리디렉션 중 하나)

cat *.tsv > /tmp/verify-size 

그리고 그 파일의 크기를 확인

du -h /tmp/verify-size ---> This should be 64k 

2

) 크기> 40K (또는 .tsv 형식의 정확한 크기 (64K))

dd if=/dev/zero of=/tmp/verify-newfile-size bs=64000 count=1 

du -h /tmp/verify-newfile-size ---> This should be 64k 
큰 더미 파일을 만듭니다

이 새로운 파일 생성이 성공하면 (어떤 크기로든 파일을 만들 수있는 경우) CP 명령을 시도하고 크기를 확인하십시오.

dd 명령

dd if=/tmp/verify-newfile-size of=/tmp/verify-newfile-size2 bs=64000 count=1 

3) 원자 명령을 시도하여 시도 - 또는

mv /tmp/verify-newfile-size /tmp/verify-newfile-size3 
+0

감사합니다 Balaji! rsync는 나를 위해 일한 것처럼 보였다. 건배! –