Filesystem Terminology¶
This page lists various terminology used by bpt and CRS
for filesystem paths and manipulation.
- directory¶
A directory is a filesystem object that can contain other files and directories. These are sometimes called “folders,” as it is common to be represented with a folder icon.
- subdirectory¶
The term “subdirectory” simply refers to a directory that is the child of another directory.
- working directory¶
Every process on an operating system has a single “working directory” filepath. This is usually inherited from the parent process that started the child process.
In a command-line environment, the working directory can be controlled with the
cdcommand.- path¶
- filepath¶
A filepath (sometimes just “path”) is a text string that represents a location on the filesystem. A filepath may be a relative filepath or an absolute filepath.
- absolute filepath¶
An absolute filepath is a filepath that identifies a unique and unambiguous location on a filesystem. Any filepath that is not an absolute filepath is a relative filepath.
On Unix-like systems, a filepath that begins with a directory separator is an absolute filepath, e.g.
/foo/baris absolute, whilefoo/baris relative.On Windows, an absolute path requires a root name (e.g. a drive letter) followed by a directory separator. A path such as
/foo/baris drive-relative on Windows. One can resolve a drive-relative path to an absolute path by prepending a drive letter, such asC:inC:/foo/bar. Windows applications will often accept/foo/barin place of absolute path, since it is often unambiguous with context what the path identifies.- relative filepath¶
A relative filepath is a filepath that identifies a filesystem location “relative” to some other filepath. Any filepath that is not an absolute filepath is a relative filepath.
“Resolving” a relative filepath is done by concatenating some base path with the relative filepath, joined by a directory separator.
For example, given a relative path
foo/barand a Unix-like base absolute path/some/directory, the relative path can be resolved by appending a directory separator to the base path followed by the relative path, resulting in the new absolute path/some/directory/foo/bar.- directory separator¶
A character used within a filepath to delineate the components of that path.
In a filepath such as
foo/bar, “foo” would be a directory that contains a file namedbar. The “/” represents the “parent path of” relationship.On Unix-like systems, the directory separator is a forward-slash “
/”. On Windows, both the forward-slash and the back-slash “\” are valid as directory separators.Multiple adjacent directory separators in a filepath are equivalent to a single directory separator. e.g.
foo//bar////baz.txtidentifies the same location asfoo/bar/baz.txt.- filename¶
A filename is the right-most component of a filepath, with any parent directory path removed. Any filename can also be considered a relative filepath with a single path component.
Given a filepath string \(P\), the filename of \(P\) is the substring of \(P\) beginning immediately after the final directory separator until the ened of the string, with the following points to consider:
If \(P\) is an empty string, the filename is an ASCII dot “
.”If \(P\) ends with a directory separator, the filename is an ASCII dot “
.”If \(P\) does not contain a directory separator, the entire string \(P\) is the filename itself.
- file extension¶
The file extension of a filepath is the substring of it’s filename beginning at the final ASCII dot “
.” until the end of the string, unless the first character of the filename is the final ASCII dot “.”.Examples¶ File extension
Explanation
baz.txt.txtbar.txt.gz.gzOnly the right-most extension is considered.
foo/bar.tar.gz.gzThe parent directory path is irrelevant.
foo.dir/bar.tgz.tgzThe parent directory path is irrelevant.
some_file(empty string)
There is no dot in the filename
foo.dir/some_file(empty string)
There is no dot in the filename
file(Empty string)
foo/bar/.(Empty string)
foo/bar/..(Empty string)
.hidden.txt.txt.hidden(Empty string)
The initial dot is not part of the extension
File extension algorithm
Given a filepath \(P\), with the filename of \(P\) as \(F\), then the file extension \(E\) of \(P\) is calculated as:
If \(F\) begins with an ASCII dot “
.”, remove it.If \(F\) is a single ASCII ddot “
.”, then \(E\) is an empty string.Otherwise, if \(F\) does not contain an ASCII dot “
.”, \(E\) is an empty string.Otherwise, \(E\) is the substring of \(F\) beginning at (and including) the last ASCII dot “
.” in \(F\) until the end of \(F\)
- file stem¶
The file stem of a filepath \(P\) is the filename of \(P\) with the file extension removed.
Note
When obtaining the file stem of a string, only the outer-most file extension should be removed.
File stem
Explanation
baz.txtbazRemoved
.txt/foo/bar/baz.txtbazRemoved the parent directory path and
.txtfile.tar.gzfile.tarOnly the final
.gzis removed.filefileNo extension, so the filename is the file stem
foo/barbarNo extension, so the filename is the file stem
foo/bar/..foo/bar/....foo/bar/.The filename is “
.”.hidden.txt.hidden- parent filepath¶
The parent filepath of some filepath \(P\) is the substring of \(P\) that identifies the directory that would contain the file identified by \(P\). If \(P\) is only a filename, the parent filepath is the single ASCII dot “
.” to refer to the working directory.