SkillAgentSearch skills...

Fls

A type-filtering wrapper for the standard ls Unix utility

Install / Use

/learn @mklement0/Fls
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

npm version license

<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->

Contents

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

fls — Introduction

flsfiltering ls — is a type-filtering wrapper for the standard ls Unix utility.

The general idea is to enhance ls with the ability to filter items by filesystem type by specifying a filter expression as the first argument.
A filter expression is composed of one or more optionally negatable filter characters based on the type-identifying chars. supported by find's -type primary and Bash's file-test operators,
such as f for files, d for directories.

Behind the scenes ls is ultimately invoked, so all of its options - except -R / --recursive, --ignore, -f and -U - are supported.
Specifying a filter is optional, so fls can generally be used in lieu of ls, with a few restrictions detailed in the manual.

The following example lists only subdirectories in the current directory, in long format:

fls d -l

fls also lends itself to creating aliases; for instance, the following alias lists all executable (x) files (f):

  • alias lsbin='fls fx'

This alias can serve as a general ls replacement with fixed options, to which you may optionally pass filters as the first operand:

  • alias lsx='fls -FAhl'

See examples below, read concise usage information further below, or read the manual.

Examples

# List all files (not directories) in the current dir.
fls f

# List all subdirs. of the user's home dir.
fls d ~

# List all symlinks to hidden files in long format in the user's home dir.
fls lf -l ~/.*

# List all executable files matching c* in /usr/local/bin
fls xf /usr/local/bin/c*

# List all empty (zero bytes) files in the current dir.
fls fe

# List all empty directories in the current dir, most recent one first.
fls de -t

# Use without filters:
fls           # same as ls
fls -lt ~     # same as ls -lt ~
fls -lt -- pg # same as lf -lt pg; -- unambiguously marks 'pg' as file operand

Installation

Supported platforms

  • When installing from the npm registry: Linux and OSX
  • When installing manually: any Unix-like platform with Bash

Installation from the npm registry

With Node.js or io.js installed, install the package as follows:

[sudo] npm install fls -g

Note:

  • Whether you need sudo depends on how you installed Node.js / io.js and whether you've changed permissions later; if you get an EACCES error, try again with sudo.
  • The -g ensures global installation and is needed to put fls in your system's $PATH.

Manual installation

  • Download this bash script as fls.
  • Make it executable with chmod +x fls.
  • Move it or symlink it to a folder in your $PATH, such as /usr/local/bin (OSX) or /usr/bin (Linux).

Usage

Find concise usage information below; for complete documentation, read the manual online, or, once installed, run man fls (fls --man if installed manually).

<!-- DO NOT EDIT THE FENCED CODE BLOCK and RETAIN THIS COMMENT: The fenced code block below is updated by `make update-readme/release` with CLI usage information. -->
$ fls --help


A type-filtering wrapper around the standard ls utility.

    fls [<filter>] [<options-for-ls>] [<dir>]
    fls [<filter>] [<options-for-ls>] <fileOrDir>...

<filter> is a string of filter characters; commonly used are:

    f       file or symlink to file
    d       dir or symlink to dir
    l       symlink
    x       executable file / searchable dir. (by you)
    e       empty file (zero bytes) or empty dir. (no files or subdirs.)

Filters are combined with logical AND, and filters placed after ^ are negated.  
E.g., fls fx^l lists executable files that aren't symlinks.

Standard options: --help, --man, --version, --home
<!-- DO NOT EDIT THE NEXT CHAPTER and RETAIN THIS COMMENT: The next chapter is updated by `make update-readme/release` with the contents of 'LICENSE.md'. ALSO, LEAVE AT LEAST 1 BLANK LINE AFTER THIS COMMENT. -->

License

Copyright (c) 2015-2020 Michael Klement mklement0@gmail.com (http://same2u.net), released under the MIT license.

Acknowledgements

This project gratefully depends on the following open-source components, according to the terms of their respective licenses.

npm dependencies below have optional suffixes denoting the type of dependency; the absence of a suffix denotes a required run-time dependency: (D) denotes a development-time-only dependency, (O) an optional dependency, and (P) a peer dependency.

<!-- DO NOT EDIT THE NEXT CHAPTER and RETAIN THIS COMMENT: The next chapter is updated by `make update-readme/release` with the dependencies from 'package.json'. ALSO, LEAVE AT LEAST 1 BLANK LINE AFTER THIS COMMENT. -->

npm dependencies

<!-- DO NOT EDIT THE NEXT CHAPTER and RETAIN THIS COMMENT: The next chapter is updated by `make update-readme/release` with the contents of 'CHANGELOG.md'. ALSO, LEAVE AT LEAST 1 BLANK LINE AFTER THIS COMMENT. -->

Changelog

Versioning complies with semantic versioning (semver).

<!-- NOTE: An entry template for a new version is automatically added each time `make version` is called. Fill in changes afterwards. -->
  • v0.4.0 (2021-08-19):

    • An attempt to use ls's -R / --recursive option now causes an error; it was never meaningfully supported.
  • v0.3.3 (2020-01-26):

    • [dev] Updated the (design-time only) npm packages.
  • v0.3.2 (2018-07-26):

    • [doc] Read-me formatting fixed.
  • v0.3.1 (2018-07-25):

    • [dev] npm-package security vulnerabilities fixed - note that these vulnerabilities never affected runtime operation.
  • v0.3.0 (2015-09-17):

    • [BREAKING CHANGES] Filter characters streamlined to be (a) all-lowercase (l now accepted in addition to L and h), s in addition to S; (b) new filter e for testing emptiness added, which supersedes the previous s filter with opposite semantics. s now means test for a socket, and what was previously s (non-emptiness test) can now be expressed more intuitively as ^e (negated emptiness test), and, conversely, a simple e tests for emptiness rather than the obsolete double-negative ^s.
  • v0.2.3 (2015-09-16):

    • [doc] man page improvements.
  • v0.2.2 (2015-09-16):

    • [doc] fls now has a man page, and -h outputs concise usage information only.
    • [fix] Filenames with backslashes are now handled correctly.
  • v0.2.1 (2015-09-15):

    • [dev] Makefile improvements; various small behind-the-scenes fixes.
  • v0.2.0 (2015-07-26):

    • [breaking changes]
      • Behavior aligned with ls so as to facilitate use of fls-based aliases as general ls replacements with optional on-demand filtering.
      • The filter argument may now be placed either before or after options; only before options is it unambiguously a filter; alternatively, following the first operand with -- also unambiguously marks it as a filter.
        Options may now be intermingled with operands, even on platforms whose ls implementation doesn't support it.
      • Conversely, use -- in lieu of a filter to explicitly requests that no filtering be performed - the previously used - no longer works.
      • If the first operand is not unambiguously specified as a filter and it is not a valid filter, it is treated as a file/dir. operand.
      • -d, previously only used behind the scenes for multiple operands, can now be used explicitly to request that a single operand that is a directory be targeted as itself, as opposed to its contents.
    • [fix] Filter validation improved to correctly detect mutually exclusive
View on GitHub
GitHub Stars13
CategoryDevelopment
Updated11d ago
Forks0

Languages

Shell

Security Score

80/100

Audited on Mar 26, 2026

No findings