while 循环 cp 给出部分文件的副本 (linux)

While loop cp give copies of partial file (linux)

我正在尝试使用以下脚本根据示例名称在不同目录中复制文件列表。尽管复制了文件,但仅复制了部分文件。我在每个文件中有 64k 行,但只复制了恰好 40k 行。

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命令对复制行数有限制吗?

干杯,

我不认为 CP 命令对要复制的文件大小有限制(除非 ulimit 有限制)但它对要复制的文件数量有限制或检查它是否与创建更大的新文件有关。

使用命令 ulimit 检查整个系统的限制,

ulimit -a

并验证文件大小不限于 40k,如果它是无限的则没有问题(例如,文件大小(块,-f)不受限制)。

尝试使用 rsync 命令,如果它适合你,

rsync -avh source destination

你能证实几件事吗,

1) 验证它是否不是文件读取错误,例如 cat 文件并将输出保存到另一个文件(manually/redirect)。

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