Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork6
search for files (even inside tar/zip/7z/rar) using a SQL-WHERE filter
License
laktak/zfind
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
zfind
allows you to search for files, including insidetar
,zip
,7z
andrar
archives. It makes finding files easy with a filter syntax that is similar to an SQL-WHERE clause. This means, if you know SQL, you don't have to learn or remember any new syntax just for this tool.
- Basic Usage & Examples
- Where Syntax
- Properties
- Supported archives
- Actions
- Configuration
- Installation
- zfind as a Go module
zfind<where> [<path>...]
Examples
#find files smaller than 10KB,in the current pathzfind 'size<10k'#find filesin the given rangein /some/pathzfind 'size between 1M and 1G' /some/path#find files modified before 2010 inside a tarzfind 'date<"2010" and archive="tar"'#find files named foo* and modified todayzfind 'name like "foo%" and date=today'#find files that contain two dashes using a regexzfind 'name rlike "(.*-){2}"'#find files that have the extension .jpg or .jpegzfind 'ext in ("jpg","jpeg")'#find directories named foo and barzfind 'name in ("foo", "bar") and type="dir"'#searchforall README.md files and showin long listing formatzfind 'name="README.md"' -l#show resultsin csv formatzfind --csvzfind --csv-no-head
AND
,OR
and()
parentheses are logical operators used to combine multiple conditions.AND
means that both conditions must be true for a row to be included in the results.OR
means that if either condition is true, the row will be included. Parentheses are used to group conditions, just like in mathematics.
Example:'(size > 20M OR name = "temp") AND type="file"'
selects all files that are either greater than 20 MB in size or are named temp.
- Operators
=
,<>
,!=
,<
,>
,<=
,>=
are comparison operators used to compare values and file properties. The types must match, meaning don't compare a date to a file size.
Example:'date > "2020-10-01"'
selects all files that were modified after the specified date.
LIKE
,ILIKE
andRLIKE
are used for pattern matching in strings.LIKE
is case-sensitive, whileILIKE
is case-insensitive.- The
%
symbol is used as a wildcard character that matches any sequence of characters. - The
_
symbol matches any single character. RLIKE
allows matching a regular expression.
Example:'"name like "z%"'
selects all files whose name starts with 'z'.
IN
allows you to specify multiple values to match. A file will be included if the value of the property matches any of the values in the list.
Example:'"type in ("file", "link")'
selects all files of type file or link.
BETWEEN
selects values within a given range (inclusive).
Example:'"date between "2010" and "2011-01-15"'
means that all files that were modified from 2010 to 2011-01-15 will be included.
NOT
is a logical operator used to negate a condition. It returns true if the condition is false and vice versa.
Example:'"name not like "z%"'
,'"date not between "2010" and "2011-01-15"'
,'"type not in ("file", "link")'
- Values can be numbers, text, date and time,
TRUE
andFALSE
- dates have to be specified in
YYYY-MM-DD
format - times have to be specified in 24h
HH:MM:SS
format - numbers can be written as sizes by appending
B
,K
,M
,G
andT
to specify bytes, KB, MB, GB, and TB. - empty strings and
0
evaluate tofalse
- dates have to be specified in
The following file properties are available:
name | description |
---|---|
name | name of the file |
path | full path of the file |
container | path of the container (if inside an archive) |
size | file size (uncompressed) |
date | modified date in YYYY-MM-DD format |
time | modified time in HH-MM-SS format |
ext | short file extension (e.g.,txt ) |
ext2 | long file extension (two parts, e.g.,tar.gz ) |
type | file ,dir , orlink |
archive | archive type:tar ,zip ,7z ,rar or empty |
Helper properties
name | description |
---|---|
today | today's date |
mo | last monday's date |
tu | last tuesday's date |
we | last wednesday's date |
th | last thursday's date |
fr | last friday's date |
sa | last saturday's date |
su | last sunday's date |
name | extensions |
---|---|
tar | .tar ,.tar.gz ,.tgz ,.tar.bz2 ,.tbz2 ,.tar.xz ,.txz |
zip | .zip |
7zip | .7z |
rar | .rar |
Note: use the flag -n (or --no-archive) to disable archive support. You can also use
'not archive'
in your query but this still requires zfind to open the archive.
zfind does not implement actions likefind
, instead usexargs -0
to execute commands:
zfind --no-archive'name like "%.txt"' -0| xargs -0 -L1echo
zfind can also produce--csv
(or--csv-no-head
) that can be piped to other commands.
Set the environment variableNO_COLOR
to disable color output.
curl https://laktak.github.io/zfind.sh|bash
This will download the zfind binary for your OS/Platform from the GitHub releases page and install it to~/.local/bin
. You will get a message if that's not in yourPATH
.
You probably want to download or view thesetup script before piping it to bash.
If you prefer you can download a binary fromgithub.com/laktak/zfind/releases manually and place it in yourPATH
.
Prereleased versions can be found directly on theGitHub Action. Click on the latestci
action and look forprerelease-artifacts
at the bottom.
For macOS and Linux it can also be installed viaHomebrew:
brew install zfind
zfind is available in the AUR aszfind:
paru -S zfind
Building from the source requires Go.
- Either install it directly
go install github.com/laktak/zfind/cmd/zfind@latest
- or clone and build
git clone https://github.com/laktak/zfindzfind/scripts/build# output is here:zfind/zfind
zfind is can also be used in other Go programs.
go get github.com/laktak/zfind
The library consists of two main packages:
- filter: provides functionality for parsing and evaluating SQL-where filter expressions
- find: implements searching for files and directories.
For more information see the linked documentation on pkg.go.dev.
About
search for files (even inside tar/zip/7z/rar) using a SQL-WHERE filter
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Contributors3
Uh oh!
There was an error while loading.Please reload this page.