2016-08-12 55 views
1

我想使用以下腳本基於它們的示例名稱複製文件列表在不同的目錄中。雖然文件被複制,但文件僅被部分複製。每個文件中都有64k行,但只有正好4萬行被複制。while循環cp給出部分文件(linux)的副本

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命令試試,如果你的作品,

rsync -avh source destination 

你能否確認幾件事情,

1)檢查,如果它不是文件讀取錯誤,像貓的文件和輸出保存到另一個文件(手動/重定向)。

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

謝謝巴拉吉! rsync似乎爲我工作。乾杯! –