Visit Our UNIX and Linux User Community


Weird 'find' results

 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Weird 'find' results
# 1  
Old 02-16-2017
Weird 'find' results

Hello and thanks in advance for any help anyone can offer me

I'm trying to learn the find command and thought I was understanding it... Apparently I was wrong. I was doing compound searches and I started getting weird results with the -size test. I was trying to do a search on a 1G file owned by the user database. I was expecting to get a single file back, but for some reason the find returns not only the 1G file but the scripting files owned by the database user. I've been messing with this for a while trying to understand it. I can filter it out by using a -not -name ".*" but that's not the point. I want to understand why it's including the start up scripts & what I'm doing wrong. Here's the command and the results... If someone could tell me what I'm doing wrong I would greatly appreciate it!!!

Code:
find /home -type f -user database -size 1G -ls
13774125 4 -rw-r--r-- 1 database database 18 Nov 20 2015 /home/database/.bash_logout
13774135 4 -rw-r--r-- 1 database database 193 Nov 20 2015 /home/database/.bash_profile
13774136 4 -rw-r--r-- 1 database database 231 Nov 20 2015 /home/database/.bashrc
13774141 1048576 -rw-r--r-- 1 database root 1073741824 Feb 16 11:10 /home/database/large1.log


Moderator's Comments:
Mod Comment Please use CODE tags as required by forum rules!

Last edited by rbatte1; 02-20-2017 at 08:47 AM.. Reason: RudiC: Added CODE tags; rbatte1 added ICODE tags and bold highlighting for clarity
# 2  
Old 02-16-2017
Not so weird if you read the man page meticulously. man find:
Quote:
-size n[cwbkMG]
File uses n units of space, rounding up.
.
.
.
The + and - prefixes signify greater than and less than, as usual. Bear in mind that the size is rounded up to the next unit. Therefore -size -1M is not equivalent to -size -1048576c. The former only matches empty files, the latter matches files from 1 to 1,048,575 bytes.
# 3  
Old 02-16-2017
Hi RudiC,
I don't understand your comments on this issue. The command in this case is:
Code:
find /home -type f -user database -size 1G -ls

which is looking for regular files owned by user database that contain exactly 1073741824 bytes. I don't see that any of first three lines of the -ls output provided by the above find command meet that criteria.

I agree that if the command had been:
Code:
find /home -type f -user database -size -1G -ls

then the output shown might be expected. But with 1G as the -size primary's argument (not -1G), I don't understand the output shown.
This User Gave Thanks to Don Cragun For This Post:
# 4  
Old 02-16-2017
Quote:
Originally Posted by Don Cragun
which is looking for regular files owned by user database that contain exactly 1073741824 bytes.
I don't think so: because the size (which is a small fraction of a GB) is rounded up to the next unit (GB here, therefore 1GB) all files with 1GB and less (but at least 1c) are shown.

I hope this helps.

bakunin
This User Gave Thanks to bakunin For This Post:
# 5  
Old 02-16-2017
Quote:
Originally Posted by Don Cragun
Hi RudiC,
I don't understand your comments on this issue. The command in this case is:
Code:
find /home -type f -user database -size 1G -ls

which is looking for regular files owned by user database that contain exactly 1073741824 bytes. I don't see that any of first three lines of the -ls output provided by the above find command meet that criteria.

I agree that if the command had been:
Code:
find /home -type f -user database -size -1G -ls

then the output shown might be expected. But with 1G as the -size primary's argument (not -1G), I don't understand the output shown.
Thanks for the reply!

The fact the 1st three lines appear (Bash startup scripts) but don't meet the criteria of my find command when I explicitly using the -size 1G test is why I'm posting. I would expect with the find criteria I'm using for ONLY the large1.log to show up. I'm trying to figure out why the Bash startup scripts are appearing when they shouldn't be.

Last edited by rbatte1; 02-20-2017 at 08:49 AM.. Reason: Added ICODE tags
# 6  
Old 02-16-2017
Quote:
Originally Posted by bakunin
I don't think so: because the size (which is a small fraction of a GB) is rounded up to the next unit (GB here, therefore 1GB) all files with 1GB and less (but at least 1c) are shown.

I hope this helps.

bakunin
Hi bakunin,
No. When no units are specified, such as with -size 2, it is looking for a file that has a size that fits in 2 512-byte blocks which corresponds to a file with a file size that is 513 through 1024 bytes. But when units are specified, an unsigned number is looking for a file with the exact size specified (at least with a BSD-based find utility which is also used on macOS systems). Note that the POSIX standard's find utility's -size primary does not include a units modifier except c (which specifies that the number is counting bytes instead of 512-byte blocks); it just has negative numbers (meaning less than number), unsigned numbers (meaning exactly that number), and positive numbers (with a leading + meaning more than number).

If some other system's find utility treats unit modifiers as block size multipliers instead of just numbers of bytes, that difference in behavior from BSD might be a reason why POSIX hasn't standardized modifiers other than c.

Hi bodisha,
What operating system are you using?
These 2 Users Gave Thanks to Don Cragun For This Post:
# 7  
Old 02-16-2017
Quote:
Originally Posted by bodisha
Thanks for the reply!

The fact the 1st three lines appear (Bash startup scripts) but don't meet the criteria of my find command when I explicitly using the "-size 1G" test is why I'm posting. I would expect with the "find" criteria I'm using for ONLY the large1.log to show up. I'm trying to figure out why the Bash startup scripts are appearing when they shouldn't be.
Hi bodisha,
Guessing that the find that you're using behaves differently than the macOS/BSD find utility I'm using and that you really do only want to select files that are exactly of size 1G bytes, try:
Code:
find /home -type f -user database -size 1073741824c -ls

If you're looking for files that are at least 1G bytes, try:
Code:
find /home -type f -user database -size +1073741823c -ls

This User Gave Thanks to Don Cragun For This Post:

Previous Thread | Next Thread
Test Your Knowledge in Computers #740
Difficulty: Medium
FORTRAN II first appeared in 1958.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to find out the weird blank characters?

I have a text file downloaded from the web, I want to count the unique words used in the file, and a person's speaking length during conversation by counting the words between the opening and closing quotation marks which differ from the standard ASCII code. Also I found out the file contains some... (2 Replies)
Discussion started by: yifangt
2 Replies

2. UNIX for Dummies Questions & Answers

[Solved] weird in find -exec command

i feel weird with this 2 command find /tmp/*test* -user `whoami` -mtime +1 -type f -exec rm -f {}\; find /tmp/*test* -user `whoami` -mtime +1 -type f -exec ls -lrt {}\; the first one return correct which only delete those filename that consist *test* where second command it listed all the... (12 Replies)
Discussion started by: lsy
12 Replies

3. UNIX for Dummies Questions & Answers

How to do ls -l on results of grep and find?

Hi, Am running the command below to search for files that contains a certain string. grep -il "shutdown" `find . -type f -mtime -1 -print` | grep "^./scripts/active" How do I get it to do a ls -l on the list of files? I tried doing ls -l `grep -il "shutdown" `find . -type f -mtime -1... (5 Replies)
Discussion started by: newbie_01
5 Replies

4. UNIX for Dummies Questions & Answers

sort find results

Hi, I have a problem with a shell script. The script should find all .cpp and .h files and list them. With: for file in `find $src -name '*.h' -o -name '*.cpp' it gives out this: H:\FileList\A\E\F\G\newCppFile.cpp H:\FileList\header01.h H:\FileList\B\nextCppFile.cpp ... (4 Replies)
Discussion started by: shellBeginner75
4 Replies

5. Shell Programming and Scripting

Find files older than X with a weird file format

I have an issue with a korn shell script that I am writing. The script parses through a configuration file which lists a heap of path/directories for some files which need to be FTP'd. Now the script needs to check whether there are any files which have not been processed and are X minutes old. ... (2 Replies)
Discussion started by: MickAAA
2 Replies

6. Programming

Weird timing results in C

I was running some timings in my code to see which of several functions was the best and I've been getting some odd results. Here's the code I'm using: static double time_loop(int (*foo)(int)) { clock_t start, end; int n = 0, i = 0; start = clock(); for (; i <= MAXN; i++) if... (6 Replies)
Discussion started by: CRGreathouse
6 Replies

7. UNIX for Advanced & Expert Users

byte swapping 32-bit float and weird od results

I'm attempting to read a file that is composed of complex 32-bit floating point values on Solaris 10 that came from a 64-bit Red Hat computer. When I first tried reading the file, it looked like there was a byte-swapping problem and after running the od command on the file Solaris and Red Hat... (2 Replies)
Discussion started by: GoDonkeys
2 Replies

8. Shell Programming and Scripting

need to move find results

I am looking for files of a certian type and logging them. After they are logged they need to be moved to a different directory. HOw can i incorporate that in my current script? CSV_OUTFILE="somefile.csv" find . -name W\* -exec printf "%s,%s,OK" {} `date '+%Y%m%d%H%M%S'` \; > ${CSV_OUTFILE} ... (9 Replies)
Discussion started by: pimentelgg
9 Replies

9. UNIX for Dummies Questions & Answers

How to sort find results

Hi-- Ok. I have now found that: find -x -ls will do what I need as far as finding all files on a particular volume. Now I need to sort the results by the file's modification date/time. Is there a way to do that? Also, I notice that for many files, whereas the man for find says ls is... (8 Replies)
Discussion started by: groundlevel
8 Replies

10. UNIX for Dummies Questions & Answers

find results

Hi, how can I get only useful results from find / -size 10000000 without the "Permissions denied" files ? tks C (5 Replies)
Discussion started by: Carmen123
5 Replies

Featured Tech Videos