structure updates
This commit is contained in:
80
tech_docs/linux/find.md
Normal file
80
tech_docs/linux/find.md
Normal file
@@ -0,0 +1,80 @@
|
||||
# Comprehensive Guide to `find` Command
|
||||
|
||||
The `find` command in Unix/Linux is a powerful utility for traversing directory trees to search for files and directories based on a wide range of criteria. This guide covers its syntax, usage examples, and some tips for creating effective searches.
|
||||
|
||||
## Syntax
|
||||
|
||||
The basic syntax of the `find` command is:
|
||||
|
||||
```bash
|
||||
find [path...] [expression]
|
||||
```
|
||||
|
||||
- `[path...]` specifies the starting directory/directories for the search. If omitted, `find` defaults to the current directory.
|
||||
- `[expression]` is used to define search criteria and actions. It can include options, tests, and actions.
|
||||
|
||||
## Common Options
|
||||
|
||||
- `-name pattern`: Search for files matching the pattern.
|
||||
- `-iname pattern`: Case-insensitive version of `-name`.
|
||||
- `-type [f|d|l]`: Search for a specific type of item: `f` for files, `d` for directories, `l` for symbolic links.
|
||||
- `-size [+-]N[cwbkMG]`: Search by file size. `+N` for greater than, `-N` for less than, `N` for exactly N units. Units can be specified: `c` (bytes), `w` (two-byte words), `k` (kilobytes), `M` (megabytes), `G` (gigabytes).
|
||||
- `-perm mode`: Search for files with specific permissions. Mode can be symbolic (e.g., `u=rwx`) or octal (e.g., `0755`).
|
||||
- `-user name`: Find files owned by the user name.
|
||||
- `-group name`: Find files owned by the group name.
|
||||
- `-mtime [+-]N`: Files modified in the last N days. `+N` for more than N days ago, `-N` for less than N days ago, `N` for exactly N days ago.
|
||||
- `-maxdepth levels`: Descend at most levels of directories below the command line arguments.
|
||||
- `-mindepth levels`: Do not apply tests or actions at levels less than levels.
|
||||
|
||||
## Combining Tests
|
||||
|
||||
You can combine multiple tests to refine your search:
|
||||
|
||||
- **AND** (implicit): `find . -type f -name "*.txt"` finds files (`-type f`) with a `.txt` extension.
|
||||
- **OR**: `find . -type f \( -name "*.txt" -o -name "*.md" \)` finds files that end in `.txt` or `.md`.
|
||||
- **NOT**: `find . -type f ! -name "*.txt"` finds files that do not end in `.txt`.
|
||||
|
||||
## Executing Commands on Found Items
|
||||
|
||||
- `-exec command {} \;`: Execute `command` on each item found. `{}` is replaced with the current file name.
|
||||
|
||||
Example: `find . -type f -name "*.tmp" -exec rm {} \;` deletes all `.tmp` files.
|
||||
|
||||
- `-exec command {} +`: Similar to `-exec`, but `command` is executed with as many found items as possible at once.
|
||||
|
||||
Example: `find . -type f -exec chmod 644 {} +` changes the permissions of all found files at once.
|
||||
|
||||
## Practical Examples
|
||||
|
||||
1. **Find All `.jpg` Files in the Home Directory**:
|
||||
```bash
|
||||
find ~/ -type f -iname "*.jpg"
|
||||
```
|
||||
|
||||
2. **Find and Delete Empty Directories**:
|
||||
```bash
|
||||
find . -type d -empty -exec rmdir {} +
|
||||
```
|
||||
|
||||
3. **Find Files Modified in the Last 7 Days**:
|
||||
```bash
|
||||
find . -type f -mtime -7
|
||||
```
|
||||
|
||||
4. **Find Files Larger than 50MB**:
|
||||
```bash
|
||||
find / -type f -size +50M
|
||||
```
|
||||
|
||||
5. **Find Files by Permission Setting**:
|
||||
```bash
|
||||
find . -type f -perm 0644
|
||||
```
|
||||
|
||||
## Tips for Effective Searches
|
||||
|
||||
- **Use Quotation Marks**: Always use quotation marks around patterns to prevent shell expansion.
|
||||
- **Test Commands with `-print`**: Before using `-exec`, use `-print` to see what files are found.
|
||||
- **Be Specific with Paths**: Specify a starting path to reduce search time and avoid unnecessary system-wide searches.
|
||||
|
||||
`find` is an indispensable tool for file management and system administration, offering unparalleled flexibility in searching for files by attributes, sizes, modification times, and more. Mastery of `find` enhances your command-line efficiency significantly.
|
||||
Reference in New Issue
Block a user