A recursive file searcher with boolean expressions.
Project description
Recursive File Searcher with Boolean Expressions
This Python script allows you to recursively search for files within a directory based on a boolean expression of keywords. It supports AND (&
), OR (|
), and parentheses for grouping, providing a flexible way to define search criteria. Matching file content can optionally be copied to the clipboard.
Features
- Recursive Search: Traverses subdirectories within the specified directory.
- Boolean Expressions: Uses
&
(AND),|
(OR), and parentheses for complex search logic. - File Pattern Inclusion/Exclusion: Filter files based on include and exclude patterns (e.g.,
*.txt
,*.log
). - Clipboard Copying: Copy the content of all matching files to the clipboard for easy access.
- Error Handling: Gracefully handles file read errors and invalid directory specifications.
- Colored Output: Uses color-coded output for improved readability (requires
colorama
). - File Grouping by Extension: Groups found files by their extensions for clearer presentation.
- UTF-8 Support: Handles files encoded in UTF-8.
Installation
You can install this package using pip:
pip install smsearch
Usage
After installation, you can use the smsearch
command:
smsearch <directory> <expression> [--include <pattern>] [--exclude <pattern>] [-c]
Arguments:
<directory>
: The directory to search in.<expression>
: The boolean expression to search for. Use&
for AND,|
for OR, and parentheses for grouping.--include <pattern>
(optional): Include only files matching this pattern. Usesfnmatch
syntax.--exclude <pattern>
(optional): Exclude files matching this pattern. Usesfnmatch
syntax.-c
,--copy
(optional): Copy the content of matching files to the clipboard.
Examples:
-
Search for files containing both "word1" and "word2":
smsearch /path/to/search "word1 & word2"
-
Search for files containing either "python" or "java", and also containing "code":
smsearch /path/to/search "(python | java) & code"
-
Search for files containing "important" and either "urgent" or "critical":
smsearch /path/to/search "important & (urgent | critical)"
-
Search for files containing either "error" or "exception" in
.log
files, excluding.gz
files:smsearch /path/to/search "error | exception" --include "*.log" --exclude "*.gz"
-
Search for files containing "confidential" and either "password" or "secret", and copy the content to the clipboard:
smsearch /path/to/search "confidential & (password | secret)" -c
How it Works
The script uses the pyparsing
library to parse the boolean expression and os.walk
to recursively search the directory. It opens each file, reads its content, and evaluates the boolean expression against the content. Matching files are printed to the console, grouped by extension. If the -c
or --copy
flag is set, the content of matching files is concatenated and copied to the clipboard.
Contributing
Contributions are welcome! Please feel free to submit pull requests for bug fixes, new features, or improvements to the documentation.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file smsearch-0.1.4.tar.gz
.
File metadata
- Download URL: smsearch-0.1.4.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e0bac7504f113bf37ac7307bfab44ccb024e39fa3aa1a8c9cf725e126973842f |
|
MD5 | 729421d4de4895cea7e6528fd3bd3cd7 |
|
BLAKE2b-256 | 2283f2bae21adcc8539102ddb6f4370262871d6350486da68a5ab57485103a89 |
File details
Details for the file smsearch-0.1.4-py3-none-any.whl
.
File metadata
- Download URL: smsearch-0.1.4-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27698d96e583a4af6ad7f368c7a45cba9deeb2bb607dd0abbca214b5028b7d17 |
|
MD5 | 6d61897d4e7612f73b5455ea92f29f85 |
|
BLAKE2b-256 | 8d885614eaba26d07f2c0f3448cea9376fbfc2ccf003400294459e96f567f9a2 |