Skip to content

Filesystem ​

Query file and directory metadata using SQL.

Usage ​

bash
loq -i:FS "SELECT * FROM '/path/to/directory'"
loq -i:FILESYSTEM "SELECT * FROM '.'"

Both -i:FS and -i:FILESYSTEM work identically.

Schema ​

ColumnTypeDescription
NameStringFile or directory name
PathStringFull absolute path
SizeIntegerSize in bytes
ExtensionStringFile extension (without dot)
IsDirectoryBooleanTrue if directory
IsReadOnlyBooleanTrue if read-only
IsHiddenBooleanTrue if hidden
CreatedDateTimeCreation timestamp
LastModifiedDateTimeLast modification timestamp
LastAccessedDateTimeLast access timestamp

Examples ​

List Files in Directory ​

bash
loq -i:FS "SELECT Name, Size, LastModified FROM '.'"

Filter by Extension ​

bash
loq -i:FS "SELECT Name, Size FROM '.'
                 WHERE Extension = 'log'"

Find Large Files ​

bash
loq -i:FS "SELECT Name, Size FROM '/home'
                 WHERE Size > 1000000
                 ORDER BY Size DESC
                 LIMIT 20"

Find Recent Files ​

bash
loq -i:FS "SELECT Name, LastModified FROM '.'
                 ORDER BY LastModified DESC
                 LIMIT 20"

Directories Only ​

bash
loq -i:FS "SELECT Name, Path FROM '.'
                 WHERE IsDirectory = true"

Files Only ​

bash
loq -i:FS "SELECT Name, Size FROM '.'
                 WHERE IsDirectory = false"

Recursive Traversal ​

Single Level Deep ​

bash
loq -i:FS -recurse:1 "SELECT * FROM '.'"

Multiple Levels ​

bash
loq -i:FS -recurse:3 "SELECT * FROM '/var/log'"

Unlimited Depth ​

bash
loq -i:FS -recurse:-1 "SELECT * FROM '.'"

WARNING

Be careful with unlimited recursion on large directory trees.

Wildcards and Patterns ​

Glob Patterns ​

bash
# All .log files
loq -i:FS "SELECT * FROM '*.log'"

# All files starting with 'app'
loq -i:FS "SELECT * FROM 'app*'"

# All .txt files in logs directory
loq -i:FS "SELECT * FROM 'logs/*.txt'"

With Recursion ​

bash
# Find all Python files recursively
loq -i:FS -recurse:5 "SELECT Name, Path FROM '.'
                            WHERE Extension = 'py'"

Common Patterns ​

Disk Usage by Extension ​

bash
loq -i:FS -recurse:3 "SELECT Extension, COUNT(*) AS count, SUM(Size) AS total_bytes
                            FROM '.'
                            WHERE IsDirectory = false
                            GROUP BY Extension
                            ORDER BY total_bytes DESC
                            LIMIT 20"

Find Old Files ​

bash
# Files not modified in 30 days
loq -i:FS -recurse:2 "SELECT Name, Path, LastModified
                            FROM '.'
                            WHERE IsDirectory = false
                            ORDER BY LastModified ASC
                            LIMIT 50"

Find Empty Files ​

bash
loq -i:FS -recurse:2 "SELECT Name, Path FROM '.'
                            WHERE Size = 0
                              AND IsDirectory = false"

Find Hidden Files ​

bash
loq -i:FS -recurse:2 "SELECT Name, Path FROM '.'
                            WHERE IsHidden = true"

File Count by Directory ​

bash
loq -i:FS -recurse:1 "SELECT Path, COUNT(*) AS count
                            FROM '.'
                            WHERE IsDirectory = true
                            GROUP BY Path"

Duplicate File Names ​

bash
loq -i:FS -recurse:3 "SELECT Name, COUNT(*) AS count
                            FROM '.'
                            WHERE IsDirectory = false
                            GROUP BY Name
                            HAVING COUNT(*) > 1
                            ORDER BY count DESC"

Total Directory Size ​

bash
loq -i:FS -recurse:-1 "SELECT SUM(Size) AS total_bytes
                             FROM '/var/log'
                             WHERE IsDirectory = false"

Files Modified Today ​

bash
loq -i:FS -recurse:2 "SELECT Name, Path, LastModified
                            FROM '.'
                            WHERE SUBSTR(LastModified, 1, 10) = SUBSTR(NOW(), 1, 10)"

Format Size for Display ​

bash
loq -i:FS "SELECT Name,
                        CASE
                          WHEN Size > 1073741824 THEN CONCAT(ROUND(Size / 1073741824, 2), ' GB')
                          WHEN Size > 1048576 THEN CONCAT(ROUND(Size / 1048576, 2), ' MB')
                          WHEN Size > 1024 THEN CONCAT(ROUND(Size / 1024, 2), ' KB')
                          ELSE CONCAT(Size, ' B')
                        END AS size_formatted
                 FROM '.'
                 ORDER BY Size DESC
                 LIMIT 20"

Platform Considerations ​

Path Separators ​

Use forward slashes on all platforms:

bash
# Works on Windows, macOS, Linux
loq -i:FS "SELECT * FROM '/var/log'"
loq -i:FS "SELECT * FROM 'C:/Users'"

Hidden Files ​

  • Unix: Files starting with . (e.g., .bashrc)
  • Windows: Files with hidden attribute

Permissions ​

Files you don't have permission to read will be skipped.

Combining with Other Operations ​

Export File List ​

bash
loq -i:FS -o:CSV --ofile:files.csv \
          "SELECT Name, Path, Size, LastModified FROM '.' -recurse:2"

Generate Report ​

bash
loq -i:FS -o:DATAGRID -recurse:2 \
          "SELECT Extension, COUNT(*) AS files, SUM(Size) AS bytes
           FROM '.'
           WHERE IsDirectory = false
           GROUP BY Extension
           ORDER BY bytes DESC"

Troubleshooting ​

Permission Denied ​

Some files may be skipped due to permissions. The query continues with accessible files.

Too Many Files ​

Use LIMIT or more specific paths for large directory trees:

bash
# Limit results
loq -i:FS -recurse:5 "SELECT * FROM '/' LIMIT 1000"

# Be more specific
loq -i:FS "SELECT * FROM '/var/log/app'"

Path Not Found ​

Verify the path exists:

bash
ls -la /path/to/directory

See Also ​

All rights reserved.