Search code examples
filesizecatls

Concatenate file weight less than the sum of the files


I have done these commands to concatenate the files into one file:

$ ls -1 | wc -l
16916
$ ls -1 *.txt | wc -l
16916
$ ls -lh | head -1
total 93M
$ cat *.txt > ../nectar_3.txt
$ ls -lh ../nectar_3.txt 
-rw-r--r-- 1 llopis llopis 52M May 25 16:03 ../nectar_3.txt

Why is the resulting file size half of the sum of the size of all files? The only explanation I can found is about rounding in the ls -lh command, but I couldn't find anything (using ls -lk outputs almost the same 92.76953125M)


Solution

  • The total is rounded, and is not guaranteed to be accurate:

    Simple example:

    marc@panic$ ls -lk
    total 24
    -rw-r--r-- 1 marc marc 6000 May 25 08:39 test1.txt
    -rw-r--r-- 1 marc marc 7000 May 25 08:39 test2.txt
    -rw-r--r-- 1 marc marc 8000 May 25 08:39 test3.txt
    

    Three simple files, total size = 21,000 bytes, yet the total shows 24.