Well, first, what is an inode? In the Unix world, an inode is a kind of file entry. A filename in a directory is just a label (a link!) to an inode. An inode can be referenced in multiple locations (hardlinks!).
-i bytes-per-inode (aka inode_ratio)
For some unknown reason this parameter is sometime documented as bytes-per-inode and sometime as inode_ratio. According to the documentation, this is the bytes/inode ratio. Most human will have a better understanding when stated as either (excuse my english):
- 1 inode for every X bytes of storage (where X is bytes-per-inode).
- lowest average-filesize you can fit.
The formula (taken from the mke2fs
source code):
inode_count = (blocks_count * blocksize) / inode_ratio
Or even simplified (assuming "partition size" is roughly equivalent to blocks_count * blocksize
, I haven't checked the allocation):
inode_count = (partition_size_in_bytes) / inode_ratio
Note 1: Even if you provide a fixed number of inode at FS creation time (mkfs -N ...
), the value is converted into a ratio, so you can fit more inode as you extend the size of the filesystem.
Note 2: If you tune this ratio, make sure to allocate significantly more inode than what you plan to use... you really don't want to reformat your filesystem.
-I inode-size
This is the number of byte the filesystem will allocate/reserve for each inode the filesystem may have. The space is used to store the attributes of the inode (read Intro to Inodes). In Ext3, the default size was 128. In Ext4, the default size is 256 (to store extra_isize
and provide space for inline extended-attributes). read Linux: Why change inode size?
Note: X bytes of disjkspace is allocated for each allocated inode, whether is free or used, where X=inode-size.
The man page for GNU find
describes -execdir
in part thusly:
Like -exec
, but the specified command is run from the subdirectory containing the matched file, which is not normally the directory in which you started find
.
So there is no real subtlety involved. -exec
invokes the command from the directory that you run find
from (and thus needs to provide the path either relative to that directory or absolute from the root), and -execdir
invokes the command from the directory containing the file and thus doesn't need to provide the full path, so does not.
To get the behavior you are after, you should use -exec
rather than -execdir
.
You can demonstrate this behavior by replacing your rm
invocation with for example echo
to simply print the list of parameters (in this case, the file name). Or use -print
which does that without needing to invoke an external command. (Note: -print
is also the default action if none is given.)
If you didn't need the confirmation, you could have used -delete
instead. For large number of files that is also likely to be more efficient as it avoids having to invoke rm
time and time again.
Best Answer
There's no difference at all. If you try:
you get no output. This means that command outputs are identical. I think you're taking that "hint" out of context. The intent was probably something different.
From the
find
man page:meaning that
[]
in the-name
argument is construed as a character class. With nothing but.
in it, it matches a literal.
as if you didn't use the[]
.