Adding size of files using shell script
up vote
2
down vote
favorite
I want to add and echo the sum of several files using shell script. How do I start?
I have a list of them like that:
$ stat /etc/*.conf | grep Size | cut -f4 -d' '
123
456
789
101112
shell-script shell
add a comment |
up vote
2
down vote
favorite
I want to add and echo the sum of several files using shell script. How do I start?
I have a list of them like that:
$ stat /etc/*.conf | grep Size | cut -f4 -d' '
123
456
789
101112
shell-script shell
5
you don't we simply usedu
?
– msp9011
Nov 21 at 7:30
1
@msp9011,du
will calculate also subdirectories
– Romeo Ninov
Nov 21 at 7:39
1
@RomeoNinov here we are checking only files...du -b /etc/*.conf
– msp9011
Nov 21 at 8:42
@msp9011 Not if there is a directory matching the pattern. It's unlikely but not impossible.
– BlackJack
Nov 21 at 17:55
@msp9011 due to block sizes, etc, disk usage is not the same as total file size.
– OrangeDog
Nov 22 at 11:45
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
I want to add and echo the sum of several files using shell script. How do I start?
I have a list of them like that:
$ stat /etc/*.conf | grep Size | cut -f4 -d' '
123
456
789
101112
shell-script shell
I want to add and echo the sum of several files using shell script. How do I start?
I have a list of them like that:
$ stat /etc/*.conf | grep Size | cut -f4 -d' '
123
456
789
101112
shell-script shell
shell-script shell
edited Nov 21 at 7:16
muru
35.3k582155
35.3k582155
asked Nov 21 at 7:13
C. Cristi
1647
1647
5
you don't we simply usedu
?
– msp9011
Nov 21 at 7:30
1
@msp9011,du
will calculate also subdirectories
– Romeo Ninov
Nov 21 at 7:39
1
@RomeoNinov here we are checking only files...du -b /etc/*.conf
– msp9011
Nov 21 at 8:42
@msp9011 Not if there is a directory matching the pattern. It's unlikely but not impossible.
– BlackJack
Nov 21 at 17:55
@msp9011 due to block sizes, etc, disk usage is not the same as total file size.
– OrangeDog
Nov 22 at 11:45
add a comment |
5
you don't we simply usedu
?
– msp9011
Nov 21 at 7:30
1
@msp9011,du
will calculate also subdirectories
– Romeo Ninov
Nov 21 at 7:39
1
@RomeoNinov here we are checking only files...du -b /etc/*.conf
– msp9011
Nov 21 at 8:42
@msp9011 Not if there is a directory matching the pattern. It's unlikely but not impossible.
– BlackJack
Nov 21 at 17:55
@msp9011 due to block sizes, etc, disk usage is not the same as total file size.
– OrangeDog
Nov 22 at 11:45
5
5
you don't we simply use
du
?– msp9011
Nov 21 at 7:30
you don't we simply use
du
?– msp9011
Nov 21 at 7:30
1
1
@msp9011,
du
will calculate also subdirectories– Romeo Ninov
Nov 21 at 7:39
@msp9011,
du
will calculate also subdirectories– Romeo Ninov
Nov 21 at 7:39
1
1
@RomeoNinov here we are checking only files...
du -b /etc/*.conf
– msp9011
Nov 21 at 8:42
@RomeoNinov here we are checking only files...
du -b /etc/*.conf
– msp9011
Nov 21 at 8:42
@msp9011 Not if there is a directory matching the pattern. It's unlikely but not impossible.
– BlackJack
Nov 21 at 17:55
@msp9011 Not if there is a directory matching the pattern. It's unlikely but not impossible.
– BlackJack
Nov 21 at 17:55
@msp9011 due to block sizes, etc, disk usage is not the same as total file size.
– OrangeDog
Nov 22 at 11:45
@msp9011 due to block sizes, etc, disk usage is not the same as total file size.
– OrangeDog
Nov 22 at 11:45
add a comment |
5 Answers
5
active
oldest
votes
up vote
2
down vote
accepted
You can do this …
total=0
for s in $(stat /etc/*.conf | grep Size | cut -f4 -d' '); do
total=$(expr $total + $s)
done
Thanks! and if I want to output it in a file I do:echo total > my_file.txt
, right? And what if I want to output the errors too what do I do then?
– C. Cristi
Nov 21 at 7:25
4
Don't use grep or cut on stat output. stat has format flags (%s) for this
– ohno
Nov 21 at 10:20
5
Also, 'Size' is likely to assume an English or "C " locale.
– xenoid
Nov 21 at 13:43
add a comment |
up vote
12
down vote
stat -c "%s" /etc/*.conf|paste -sd+|bc -l
Although effectively the same as @xenoid's solution, I prefer this because 1) less rigamarole with format strings and remembering to append the final "0"; and 2) while it costs a process, it hews closer to the "one thing well" philosophy. It's also a useful use of the (perhaps underappreciated)paste
utility that can be applied to a larger class of problems: separating a bunch of stuff with a delimiter. Another example is "unwrapping" (removing the line breaks from) a text file:paste -sd$' ' inputfile
.
– TheDudeAbides
Nov 21 at 23:20
1
@TheDudeAbides, all those things are true about awk. And it use one process less. And IMO is much more readable
– Romeo Ninov
Nov 22 at 10:29
add a comment |
up vote
12
down vote
Also something like can do the work (with awk
)
stat -c "%s" /etc/*.conf|awk '{s+=$1} END {print s}'
add a comment |
up vote
10
down vote
With bc
{ stat -c '%s+' /etc/*.conf ; echo 0 ; } | bc
- The
stat
format adds a+
sign and a continuation character after each size - a
0
is appended at the end to close the dangling final+
add a comment |
up vote
7
down vote
The most straightforward way is to use du -bc
:
$ du -bc /etc/*.conf
5139 /etc/man_db.conf
393 /etc/nsswitch.conf
5532 total
If you need to extract only the number of bytes, pipe the output to awk
:
$ du -bc /etc/*.conf | awk 'END { print $1 }'
5532
Hope ... OP doesn't require the grand total size of all files...
– msp9011
Nov 21 at 8:55
1
Also note that this gives disk usage, not apparent sizes of the files.--apparent-size
option may be needed to use apparent sizes.
– Ruslan
Nov 21 at 17:04
@Ruslan Theawk
line also strips off thetotal
– Izkata
Nov 21 at 18:09
@Izkata oh, indeed, didn't notice this bit.
– Ruslan
Nov 21 at 18:49
add a comment |
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
You can do this …
total=0
for s in $(stat /etc/*.conf | grep Size | cut -f4 -d' '); do
total=$(expr $total + $s)
done
Thanks! and if I want to output it in a file I do:echo total > my_file.txt
, right? And what if I want to output the errors too what do I do then?
– C. Cristi
Nov 21 at 7:25
4
Don't use grep or cut on stat output. stat has format flags (%s) for this
– ohno
Nov 21 at 10:20
5
Also, 'Size' is likely to assume an English or "C " locale.
– xenoid
Nov 21 at 13:43
add a comment |
up vote
2
down vote
accepted
You can do this …
total=0
for s in $(stat /etc/*.conf | grep Size | cut -f4 -d' '); do
total=$(expr $total + $s)
done
Thanks! and if I want to output it in a file I do:echo total > my_file.txt
, right? And what if I want to output the errors too what do I do then?
– C. Cristi
Nov 21 at 7:25
4
Don't use grep or cut on stat output. stat has format flags (%s) for this
– ohno
Nov 21 at 10:20
5
Also, 'Size' is likely to assume an English or "C " locale.
– xenoid
Nov 21 at 13:43
add a comment |
up vote
2
down vote
accepted
up vote
2
down vote
accepted
You can do this …
total=0
for s in $(stat /etc/*.conf | grep Size | cut -f4 -d' '); do
total=$(expr $total + $s)
done
You can do this …
total=0
for s in $(stat /etc/*.conf | grep Size | cut -f4 -d' '); do
total=$(expr $total + $s)
done
answered Nov 21 at 7:20
Red Cricket
1,20431731
1,20431731
Thanks! and if I want to output it in a file I do:echo total > my_file.txt
, right? And what if I want to output the errors too what do I do then?
– C. Cristi
Nov 21 at 7:25
4
Don't use grep or cut on stat output. stat has format flags (%s) for this
– ohno
Nov 21 at 10:20
5
Also, 'Size' is likely to assume an English or "C " locale.
– xenoid
Nov 21 at 13:43
add a comment |
Thanks! and if I want to output it in a file I do:echo total > my_file.txt
, right? And what if I want to output the errors too what do I do then?
– C. Cristi
Nov 21 at 7:25
4
Don't use grep or cut on stat output. stat has format flags (%s) for this
– ohno
Nov 21 at 10:20
5
Also, 'Size' is likely to assume an English or "C " locale.
– xenoid
Nov 21 at 13:43
Thanks! and if I want to output it in a file I do:
echo total > my_file.txt
, right? And what if I want to output the errors too what do I do then?– C. Cristi
Nov 21 at 7:25
Thanks! and if I want to output it in a file I do:
echo total > my_file.txt
, right? And what if I want to output the errors too what do I do then?– C. Cristi
Nov 21 at 7:25
4
4
Don't use grep or cut on stat output. stat has format flags (%s) for this
– ohno
Nov 21 at 10:20
Don't use grep or cut on stat output. stat has format flags (%s) for this
– ohno
Nov 21 at 10:20
5
5
Also, 'Size' is likely to assume an English or "C " locale.
– xenoid
Nov 21 at 13:43
Also, 'Size' is likely to assume an English or "C " locale.
– xenoid
Nov 21 at 13:43
add a comment |
up vote
12
down vote
stat -c "%s" /etc/*.conf|paste -sd+|bc -l
Although effectively the same as @xenoid's solution, I prefer this because 1) less rigamarole with format strings and remembering to append the final "0"; and 2) while it costs a process, it hews closer to the "one thing well" philosophy. It's also a useful use of the (perhaps underappreciated)paste
utility that can be applied to a larger class of problems: separating a bunch of stuff with a delimiter. Another example is "unwrapping" (removing the line breaks from) a text file:paste -sd$' ' inputfile
.
– TheDudeAbides
Nov 21 at 23:20
1
@TheDudeAbides, all those things are true about awk. And it use one process less. And IMO is much more readable
– Romeo Ninov
Nov 22 at 10:29
add a comment |
up vote
12
down vote
stat -c "%s" /etc/*.conf|paste -sd+|bc -l
Although effectively the same as @xenoid's solution, I prefer this because 1) less rigamarole with format strings and remembering to append the final "0"; and 2) while it costs a process, it hews closer to the "one thing well" philosophy. It's also a useful use of the (perhaps underappreciated)paste
utility that can be applied to a larger class of problems: separating a bunch of stuff with a delimiter. Another example is "unwrapping" (removing the line breaks from) a text file:paste -sd$' ' inputfile
.
– TheDudeAbides
Nov 21 at 23:20
1
@TheDudeAbides, all those things are true about awk. And it use one process less. And IMO is much more readable
– Romeo Ninov
Nov 22 at 10:29
add a comment |
up vote
12
down vote
up vote
12
down vote
stat -c "%s" /etc/*.conf|paste -sd+|bc -l
stat -c "%s" /etc/*.conf|paste -sd+|bc -l
answered Nov 21 at 7:22
Ipor Sircer
10.3k11024
10.3k11024
Although effectively the same as @xenoid's solution, I prefer this because 1) less rigamarole with format strings and remembering to append the final "0"; and 2) while it costs a process, it hews closer to the "one thing well" philosophy. It's also a useful use of the (perhaps underappreciated)paste
utility that can be applied to a larger class of problems: separating a bunch of stuff with a delimiter. Another example is "unwrapping" (removing the line breaks from) a text file:paste -sd$' ' inputfile
.
– TheDudeAbides
Nov 21 at 23:20
1
@TheDudeAbides, all those things are true about awk. And it use one process less. And IMO is much more readable
– Romeo Ninov
Nov 22 at 10:29
add a comment |
Although effectively the same as @xenoid's solution, I prefer this because 1) less rigamarole with format strings and remembering to append the final "0"; and 2) while it costs a process, it hews closer to the "one thing well" philosophy. It's also a useful use of the (perhaps underappreciated)paste
utility that can be applied to a larger class of problems: separating a bunch of stuff with a delimiter. Another example is "unwrapping" (removing the line breaks from) a text file:paste -sd$' ' inputfile
.
– TheDudeAbides
Nov 21 at 23:20
1
@TheDudeAbides, all those things are true about awk. And it use one process less. And IMO is much more readable
– Romeo Ninov
Nov 22 at 10:29
Although effectively the same as @xenoid's solution, I prefer this because 1) less rigamarole with format strings and remembering to append the final "0"; and 2) while it costs a process, it hews closer to the "one thing well" philosophy. It's also a useful use of the (perhaps underappreciated)
paste
utility that can be applied to a larger class of problems: separating a bunch of stuff with a delimiter. Another example is "unwrapping" (removing the line breaks from) a text file: paste -sd$' ' inputfile
.– TheDudeAbides
Nov 21 at 23:20
Although effectively the same as @xenoid's solution, I prefer this because 1) less rigamarole with format strings and remembering to append the final "0"; and 2) while it costs a process, it hews closer to the "one thing well" philosophy. It's also a useful use of the (perhaps underappreciated)
paste
utility that can be applied to a larger class of problems: separating a bunch of stuff with a delimiter. Another example is "unwrapping" (removing the line breaks from) a text file: paste -sd$' ' inputfile
.– TheDudeAbides
Nov 21 at 23:20
1
1
@TheDudeAbides, all those things are true about awk. And it use one process less. And IMO is much more readable
– Romeo Ninov
Nov 22 at 10:29
@TheDudeAbides, all those things are true about awk. And it use one process less. And IMO is much more readable
– Romeo Ninov
Nov 22 at 10:29
add a comment |
up vote
12
down vote
Also something like can do the work (with awk
)
stat -c "%s" /etc/*.conf|awk '{s+=$1} END {print s}'
add a comment |
up vote
12
down vote
Also something like can do the work (with awk
)
stat -c "%s" /etc/*.conf|awk '{s+=$1} END {print s}'
add a comment |
up vote
12
down vote
up vote
12
down vote
Also something like can do the work (with awk
)
stat -c "%s" /etc/*.conf|awk '{s+=$1} END {print s}'
Also something like can do the work (with awk
)
stat -c "%s" /etc/*.conf|awk '{s+=$1} END {print s}'
answered Nov 21 at 7:35
Romeo Ninov
5,02431627
5,02431627
add a comment |
add a comment |
up vote
10
down vote
With bc
{ stat -c '%s+' /etc/*.conf ; echo 0 ; } | bc
- The
stat
format adds a+
sign and a continuation character after each size - a
0
is appended at the end to close the dangling final+
add a comment |
up vote
10
down vote
With bc
{ stat -c '%s+' /etc/*.conf ; echo 0 ; } | bc
- The
stat
format adds a+
sign and a continuation character after each size - a
0
is appended at the end to close the dangling final+
add a comment |
up vote
10
down vote
up vote
10
down vote
With bc
{ stat -c '%s+' /etc/*.conf ; echo 0 ; } | bc
- The
stat
format adds a+
sign and a continuation character after each size - a
0
is appended at the end to close the dangling final+
With bc
{ stat -c '%s+' /etc/*.conf ; echo 0 ; } | bc
- The
stat
format adds a+
sign and a continuation character after each size - a
0
is appended at the end to close the dangling final+
answered Nov 21 at 10:06
xenoid
2,5981724
2,5981724
add a comment |
add a comment |
up vote
7
down vote
The most straightforward way is to use du -bc
:
$ du -bc /etc/*.conf
5139 /etc/man_db.conf
393 /etc/nsswitch.conf
5532 total
If you need to extract only the number of bytes, pipe the output to awk
:
$ du -bc /etc/*.conf | awk 'END { print $1 }'
5532
Hope ... OP doesn't require the grand total size of all files...
– msp9011
Nov 21 at 8:55
1
Also note that this gives disk usage, not apparent sizes of the files.--apparent-size
option may be needed to use apparent sizes.
– Ruslan
Nov 21 at 17:04
@Ruslan Theawk
line also strips off thetotal
– Izkata
Nov 21 at 18:09
@Izkata oh, indeed, didn't notice this bit.
– Ruslan
Nov 21 at 18:49
add a comment |
up vote
7
down vote
The most straightforward way is to use du -bc
:
$ du -bc /etc/*.conf
5139 /etc/man_db.conf
393 /etc/nsswitch.conf
5532 total
If you need to extract only the number of bytes, pipe the output to awk
:
$ du -bc /etc/*.conf | awk 'END { print $1 }'
5532
Hope ... OP doesn't require the grand total size of all files...
– msp9011
Nov 21 at 8:55
1
Also note that this gives disk usage, not apparent sizes of the files.--apparent-size
option may be needed to use apparent sizes.
– Ruslan
Nov 21 at 17:04
@Ruslan Theawk
line also strips off thetotal
– Izkata
Nov 21 at 18:09
@Izkata oh, indeed, didn't notice this bit.
– Ruslan
Nov 21 at 18:49
add a comment |
up vote
7
down vote
up vote
7
down vote
The most straightforward way is to use du -bc
:
$ du -bc /etc/*.conf
5139 /etc/man_db.conf
393 /etc/nsswitch.conf
5532 total
If you need to extract only the number of bytes, pipe the output to awk
:
$ du -bc /etc/*.conf | awk 'END { print $1 }'
5532
The most straightforward way is to use du -bc
:
$ du -bc /etc/*.conf
5139 /etc/man_db.conf
393 /etc/nsswitch.conf
5532 total
If you need to extract only the number of bytes, pipe the output to awk
:
$ du -bc /etc/*.conf | awk 'END { print $1 }'
5532
answered Nov 21 at 8:43
Martin Frodl
893
893
Hope ... OP doesn't require the grand total size of all files...
– msp9011
Nov 21 at 8:55
1
Also note that this gives disk usage, not apparent sizes of the files.--apparent-size
option may be needed to use apparent sizes.
– Ruslan
Nov 21 at 17:04
@Ruslan Theawk
line also strips off thetotal
– Izkata
Nov 21 at 18:09
@Izkata oh, indeed, didn't notice this bit.
– Ruslan
Nov 21 at 18:49
add a comment |
Hope ... OP doesn't require the grand total size of all files...
– msp9011
Nov 21 at 8:55
1
Also note that this gives disk usage, not apparent sizes of the files.--apparent-size
option may be needed to use apparent sizes.
– Ruslan
Nov 21 at 17:04
@Ruslan Theawk
line also strips off thetotal
– Izkata
Nov 21 at 18:09
@Izkata oh, indeed, didn't notice this bit.
– Ruslan
Nov 21 at 18:49
Hope ... OP doesn't require the grand total size of all files...
– msp9011
Nov 21 at 8:55
Hope ... OP doesn't require the grand total size of all files...
– msp9011
Nov 21 at 8:55
1
1
Also note that this gives disk usage, not apparent sizes of the files.
--apparent-size
option may be needed to use apparent sizes.– Ruslan
Nov 21 at 17:04
Also note that this gives disk usage, not apparent sizes of the files.
--apparent-size
option may be needed to use apparent sizes.– Ruslan
Nov 21 at 17:04
@Ruslan The
awk
line also strips off the total
– Izkata
Nov 21 at 18:09
@Ruslan The
awk
line also strips off the total
– Izkata
Nov 21 at 18:09
@Izkata oh, indeed, didn't notice this bit.
– Ruslan
Nov 21 at 18:49
@Izkata oh, indeed, didn't notice this bit.
– Ruslan
Nov 21 at 18:49
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f483135%2fadding-size-of-files-using-shell-script%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
5
you don't we simply use
du
?– msp9011
Nov 21 at 7:30
1
@msp9011,
du
will calculate also subdirectories– Romeo Ninov
Nov 21 at 7:39
1
@RomeoNinov here we are checking only files...
du -b /etc/*.conf
– msp9011
Nov 21 at 8:42
@msp9011 Not if there is a directory matching the pattern. It's unlikely but not impossible.
– BlackJack
Nov 21 at 17:55
@msp9011 due to block sizes, etc, disk usage is not the same as total file size.
– OrangeDog
Nov 22 at 11:45