F2 is a cross-platform command-line tool for batch renaming files and directories quickly and safely. Written in Go!

f2

Github Actions made-with-Go GoReportCard Go.mod version LICENCE Latest release

F2 - Command-line batch renaming tool

F2 is a cross-platform command-line tool for batch renaming files and directories quickly and safely. Written in Go!

F2 in action on Ubuntu Linux

⚑ Installation

F2 is written in Go, so you can install it through go install (requires Go 1.16 or later):

$ go install github.com/ayoisaiah/f2/cmd/f2@latest

πŸ“¦ NPM package

You can also install F2 via its npm package:

With npm:

$ npm i @ayoisaiah/f2 -g

With yarn:

$ yarn global add @ayoisaiah/f2

Other installation methods are available here.

πŸ’₯ Why should you use F2?

  • F2 helps you organise your filesystem through batch renaming so that your files and directories can have a consistent naming scheme.
  • It offers a comprehensive set of renaming options, and scales well from trivial string replacements to more complex operations involving regular expressions.
  • F2 prioritises correctness and safety by ensuring that a renaming operation does not result in conflicts or errors. It runs several validations before carrying out a renaming operation, and provides an easy way to automatically fix any detected conflicts.
  • F2 supports all the standard renaming recipes including (but not limited to) string replacement, insertion of text as a prefix, suffix or other position in the file name, stripping a set of characters, changing the case of a set of letters, using auto incrementing numbers, swapping parts of the file name, e.t.c.
  • F2 provides several built-in variables for added flexibility in the renaming process. These variables are based on file attributes such as Exif information for images, and ID3 tags for audio files. F2 also supports utilising tags from the popular exiftool which should cover most use cases.
  • F2 is very fast and won't waste your time. See benchmarks.
  • F2 allows you to revert any renaming operation performed with the program. This means you don't have to worry about making a mistake because you can always get back to the previous state without breaking a sweat.
  • F2 has good test coverage with equal attention paid to all supported platforms (Linux, Windows and macOS).
  • F2 is well documented so that you won't have to scratch your head while figuring out what you can do with it. Lots of realistic examples are provided to aid comprehension.

✨ Main features

  • Safe and transparent. F2 uses a dry run mode by default so you can review the exact changes that will be made to your filesystem before making them.
  • Cross-platform with full support for Linux, macOS, and Windows. It also runs on less commonly-used platforms, like Termux (Android).
  • Extremely fast, even when working with a large amount of files.
  • Supports the chaining of several consecutive renaming operations before a final output is produced.
  • Automatically detects potential conflicts such as file collisions, or overrides and reports them to you.
  • Provides several built-in variables for the easier renaming of certain file types.
  • Provides easy access to all ~25,000 tags in exiftool for maximum flexibility in renaming.
  • Supports find and replace using regular expressions, including capture groups.
  • Ignores hidden directories and files by default.
  • Respects the NO_COLOR environmental variable.
  • Supports limiting the number of replaced matches, and you can start from the beginning or end of the file name.
  • Supports recursive renaming for both files and directories.
  • Supports renaming only files, or only directories, or both.
  • Supports using an ascending integer for renaming (e.g 001, 002, 003, e.t.c.), and it can be formatted in several ways.
  • Supports undoing the last renaming operation in case of mistakes or errors.
  • Supports renaming from a CSV file.
  • Extensive documentation and examples for each option that is provided.

πŸ’» Screenshots

Screenshot of F2 in action on Linux

F2 can utilise exif attributes from a variety of image formats

F2 can utilise ID3 attributes to organise music files

πŸ“ƒ Documentation

Visit the wiki page to view usage examples and learn about all the renaming operations that can be achieved with F2.

πŸ”₯ Benchmarks

Environment

  • OS: Ubuntu 20.04.2 LTS on Windows 10 x86_64
  • CPU: Intel i7-7560U (4) @ 2.400GHz
  • Kernel: 4.19.128-microsoft-standard

Renaming 10,000 MP3 files using their ID3 attributes (~1.6 seconds):

$ hyperfine --warmup 3 'f2 -f ".*" -r "{{id3.artist}}_{{id3.album}}_{{id3.track}}_{{r} }.mp3" -x'
Benchmark #1: f2 -f ".*" -r "{{id3.artist}}_{{id3.album}}_{{id3.track}}_{{r}}.mp3" -x
  Time (mean Β± Οƒ):      1.691 s Β±  0.031 s    [User: 1.326 s, System: 0.744 s]
  Range (min … max):    1.634 s …  1.736 s    10 runs

Renaming 100,000 files using a random string and an auto incrementing integer (~5 seconds):

$ hyperfine --warmup 3 'f2 -f ".*" -r "{{r}}_%03d" -x'
Benchmark #1: f2 -f ".*" -r "{{r}}_%03d" -x
  Time (mean Β± Οƒ):      4.938 s Β±  0.328 s    [User: 2.792 s, System: 2.770 s]
  Range (min … max):    4.421 s …  5.474 s    10 runs

Renaming 100,000 JPEG files using their Exif attributes (~30 seconds):

$ hyperfine --warmup 3 'f2 -f ".*" -r "{{x.make}}_{{x.model}}_{{x.iso}}_{{x.wh}}_{{r}}_%03d.jpg" -x'
Benchmark #1: f2 -f ".*" -r "{{x.make}}_{{x.model}}_{{x.iso}}_{{x.wh}}_{{r}}_%03d.jpg" -x
  Time (mean Β± Οƒ):     31.143 s Β±  1.691 s    [User: 34.792 s, System: 4.779 s]
  Range (min … max):   29.317 s … 33.355 s    10 runs

Windows

Renaming 10,000 MP3 files with an auto incrementing integer through native PowerShell commands (~30 seconds):

$ Measure-Command { Get-ChildItem *.mp3 | ForEach-Object -Begin { $count = 1 } -Process { Rename-Item $_ -NewName "music_$count.mp3"; $count++ } }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 29
Milliseconds      : 582
Ticks             : 295824810
TotalDays         : 0.000342389826388889
TotalHours        : 0.00821735583333333
TotalMinutes      : 0.49304135
TotalSeconds      : 29.582481
TotalMilliseconds : 29582.481

Renaming 10,000 MP3 files with an auto incrementing integer through F2 (~12 seconds):

$ Measure-Command { f2 -f ".*" -r "audio_%03d.mp3" -x }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 11
Milliseconds      : 634
Ticks             : 116342215
TotalDays         : 0.000134655341435185
TotalHours        : 0.00323172819444444
TotalMinutes      : 0.193903691666667
TotalSeconds      : 11.6342215
TotalMilliseconds : 11634.2215

🀝 Contribute

Bug reports and feature requests are much welcome! Please open an issue before creating a pull request.

βš– Licence

Created by Ayooluwa Isaiah and released under the terms of the MIT Licence.

Owner
Ayooluwa
Software Developer
Ayooluwa
Comments
  • [Feature Request] Add an option that allows passing a list of files as argument

    [Feature Request] Add an option that allows passing a list of files as argument

    In some cases we need to batch rename some files which don't share any similarities in the file names. It would be a pain in the ass to write a RE to match all of them at the same time. It f2 could take a list of files (directly in the command line or as a list file ) as argument, it would be much easier. Thanks!

  • Renaming mp3s fails on Windows if using ID3 tags.

    Renaming mp3s fails on Windows if using ID3 tags.

    Trying to rename a folder full of mp3 on Windows 10 using ID3 tags results in the following error for every file: The process cannot access the file because it is being used by another process. Using a file handle viewer, I was able to conclude that no processes actually had the files open and by trial and error, I discovered that it was the use of ID3 tags to rename it that was causing the error. f2 -r "{{id3.artist}} - {{id3.title}}{{ext}}" -x

  • Using regex capture group appended with underscore leads to erroneously named files

    Using regex capture group appended with underscore leads to erroneously named files

    Hi and thank you for creating this awesome tool!

    I ran into an issue where f2 doesn't generate the desired output name when using regex capture groups together with an underscore.

    Steps to reproduce

    I created a test directory with three test files. In there I tried to rename the test1.txt to test_01.txt.

    PS > touch test1.txt
    PS > touch test2.txt
    PS > touch test3.txt
    PS > f2 -f '(.*)\d.txt' -r '$1_%02d{{ext}}'
    

    Expected result

    I assumed that the files would get renamed to test_01.txt, etc. Something like this:

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    | ORIGINAL  | RENAMED     | STATUS |
    | ******************************** |
    | test1.txt | test_01.txt | ok     |
    | test2.txt | test_02.txt | ok     |
    | test3.txt | test_03.txt | ok     |
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    

    Actual result

    Actually the tool is not happy about the _ and does not insert the first capture group at all.

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    | ORIGINAL  | RENAMED | STATUS |
    | **************************** |
    | test1.txt | 01.txt  | ok     |
    | test2.txt | 02.txt  | ok     |
    | test3.txt | 03.txt  | ok     |
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    

    The error becomes more obvious when using the following command: f2 -V -f '(.*)\d.txt' -r '$1_a'

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    | ORIGINAL  | RENAMED | STATUS         |
    | ************************************ |
    | test1.txt |         | empty filename |
    | test2.txt |         | empty filename |
    | test3.txt |         | empty filename |
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    

    Without the underscore it works just fine f2 -V -f '(.*)\d.txt' -r '$1 %02d{{ext}}'

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    | ORIGINAL  | RENAMED     | STATUS |
    | ******************************** |
    | test1.txt | test 01.txt | ok     |
    | test2.txt | test 02.txt | ok     |
    | test3.txt | test 03.txt | ok     |
    | test4.txt | test 04.txt | ok     |
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    

    Version

    PS > f2 --version
    f2 version v1.8.0
    https://github.com/ayoisaiah/f2/releases/v1.8.0
    

    Let me know if you need anything else in order to further investigate the issue.

    Cheers, Rico

  • directories to lowercase not working

    directories to lowercase not working

    The command f2 -D -f '.*.' -r {{tr.lw}}' does produce a correct preview with all upercase letters changes into lowercases, however, f2 -verbose -x -D -f '.*.' -r {{tr.lw}}' produces a lot of success messages like "SUCCESS Renamed Ludwig_Hirsch to ludwig_hirsch" but does not change a thing.

    the command "mv Ludwig_Hirsch ludwig_hirsch" works nicely - did i find an issue there or am i doing sth wrong?

    Version is 1.8.0 on rasbian buster, Filesystem is vfat - maybe that is the culprit?

  • Leading zeros

    Leading zeros

    I'm using

    f2 -f '(\w+) ((\d+)).(\w+)' -r '$1-$2.$3'

    and get

    | ORIGINAL | RENAMED | STATUS | | ************************************************ | | 1528655011 (1).jpg | 1528655011-1.jpg | ok | | 1528655011 (10).jpg | 1528655011-10.jpg | ok |

    but I want for $2 leading zeros and 3 digits.

    How I have to do it?

  • [bug] error when double dots

    [bug] error when double dots ".." in sub-folder (of dst path)

    I'm using f2 to group lots of files into sub-folders based on part of their names, via regex. When renameing is something like from src /root/title [artist_name_with..].mp4 to dst /root/artist_name_with../title [artist_name_with..].mp4, it throws an error occurred while renaming. Could only guess but seems like the double dots .. in the sub-folder name artist_name_with.. is the cause.

    OS is Windows 10

  • Extract date and time from video files

    Extract date and time from video files

    Hi,

    I was trying to sort out my media files, and I've noticed that f2 doesn't really support reading date and time reading from a mp4 file. They don't have the usual date time field used for photos but have MediaCreateDate:

    [{
      "SourceFile": "testdata/videos/pixel6pro.mp4",
      "ExifToolVersion": 11.88,
      "FileName": "pixel6pro.mp4",
      "Directory": "testdata/videos",
      "FileSize": "15 MB",
      "FileModifyDate": "2022:10:24 03:46:40+02:00",
      "FileAccessDate": "2022:10:24 17:24:54+02:00",
      "FileInodeChangeDate": "2022:10:24 17:50:10+02:00",
      "FilePermissions": "rwxrwxrwx",
      "FileType": "MP4",
      "FileTypeExtension": "mp4",
      "MIMEType": "video/mp4",
      "MajorBrand": "MP4  Base Media v1 [IS0 14496-12:2003]",
      "MinorVersion": "2.0.0",
      "CompatibleBrands": ["isom","iso2","mp41"],
      "MediaDataSize": 15765030,
      "MediaDataOffset": 44,
      "MovieHeaderVersion": 0,
      "CreateDate": "2022:10:21 15:58:43",
      "ModifyDate": "2022:10:21 15:58:43",
      "TimeScale": 10000,
      "Duration": "8.01 s",
      "PreferredRate": 1,
      "PreferredVolume": "100.00%",
      "PreviewTime": "0 s",
      "PreviewDuration": "0 s",
      "PosterTime": "0 s",
      "SelectionTime": "0 s",
      "SelectionDuration": "0 s",
      "CurrentTime": "0 s",
      "NextTrackID": 6,
      "GPSCoordinates": "40 deg 42' 43.56\" N, 74 deg 0' 42.48\" W",
      "TrackHeaderVersion": 0,
      "TrackCreateDate": "2022:10:21 15:58:43",
      "TrackModifyDate": "2022:10:21 15:58:43",
      "TrackID": 1,
      "TrackDuration": "8.01 s",
      "TrackLayer": 0,
      "TrackVolume": "100.00%",
      "ImageWidth": 1024,
      "ImageHeight": 768,
      "GraphicsMode": "srcCopy",
      "OpColor": "0 0 0",
      "CompressorID": "avc1",
      "SourceImageWidth": 1024,
      "SourceImageHeight": 768,
      "XResolution": 72,
      "YResolution": 72,
      "BitDepth": 24,
      "PixelAspectRatio": "65536:65536",
      "ColorRepresentation": "nclx 1 1 1",
      "VideoFrameRate": 24.233,
      "Warning": "[minor] The ExtractEmbedded option may find more tags in the media data",
      "Balance": 0,
      "AudioFormat": "mp4a",
      "AudioChannels": 2,
      "AudioBitsPerSample": 16,
      "AudioSampleRate": 48000,
      "MatrixStructure": "0 1 0 -1 0 0 0 0 1",
      "MediaHeaderVersion": 0,
      "MediaCreateDate": "2022:10:21 15:58:43",
      "MediaModifyDate": "2022:10:21 15:58:43",
      "MediaTimeScale": 90000,
      "MediaDuration": "0 s",
      "HandlerType": "NRT Metadata",
      "HandlerDescription": "MetaHandle",
      "MetaFormat": "mett",
      "ImageSize": "1024x768",
      "Megapixels": 0.786,
      "AvgBitrate": "15.7 Mbps",
      "GPSLatitude": "40 deg 42' 43.56\" N",
      "GPSLongitude": "74 deg 0' 42.48\" W",
      "Rotation": 90,
      "GPSPosition": "40 deg 42' 43.56\" N, 74 deg 0' 42.48\" W"
    }]
    

    so technically it should be able to extract this value, parse it and make it accessible via x.dt.YYYY for example. What do you think?

    I could use xt.MediaCreateDate but it's hard to parse it to something like 2022-10-24_18-33 because it uses : inside of the string

  • How to batch pad 0 of number ?

    How to batch pad 0 of number ?

    Files in the current directory:
    1.txt 22.txt 333.txt
    1.txt -> 0001.txt 22.txt -> 0022.txt 333.txt -> 0333.txt With another command line rename tool nomino:
    nomino -tp "([0-9]+).txt" "{:4}.txt"
    Since it is a very common task.
    How to do this with f2 ?

  • "-e" option considers the last period in directory name as extension separator

    For example, if I have directory test.dir.period nested inside test directory, then running f2 -ed -f '\.' -r ' ' test returns this:

    +----------------------+----------------------+--------+
    |        INPUT         |        OUTPUT        | STATUS |
    +----------------------+----------------------+--------+
    | test/test.dir.period | test/test dir.period | ok     |
    +----------------------+----------------------+--------+
    

    And if I try to match the "extension" of the directory by running f2 -ed -f 'period' -r 'full stop' test: INFO Failed to match any files

    Version: 1.7.2 OS: Arch Linux

  • [question] how does f2 distinguish regex from simple text?

    [question] how does f2 distinguish regex from simple text?

    there's neither cli option to toggle regex, nor special format in text for -f -r options, to tell if the text is regex or not in case the text is both acceptable as regex or literal, how to ensure f2 work correctly?

  • String functions usage enhancements

    String functions usage enhancements

    I would suggest couple of enhancements to this great tool!

    1. allow string functions to be used on match groups, e.g.: f2 '\b(.)' '{{$1.up}}'
    2. allow string transformations to be used on built in variables: e.g.: f2 '.*' '{{f.ti}}{{ext}}'
  • exiftool - fatal error: all goroutines are asleep - deadlock

    exiftool - fatal error: all goroutines are asleep - deadlock

    As I was trying to use the exiftool, it seems that I broke your tool (again) :D. I am using Windows and installed the exiftool via chocolatey (choco install exiftool). Maybe It's because of the way I installed exiftool. Are there instructions for installing exiftool on Windows?

    PS > f2 -r '{{xt.Title}} by {{xt.Creator}}{{ext}}'
    fatal error: all goroutines are asleep - deadlock!
    
    goroutine 1 [select]:
    io.(*pipe).read(0xc00002a300, {0xc00014106f, 0xf91, 0x9?})
            C:/Program Files/Go/src/io/pipe.go:57 +0xb1
    io.(*PipeReader).Read(0xc000141000?, {0xc00014106f?, 0x1000?, 0x201300?})
            C:/Program Files/Go/src/io/pipe.go:136 +0x25
    bufio.(*Scanner).Scan(0xc00009b980)
            C:/Program Files/Go/src/bufio/scan.go:214 +0x876
    github.com/barasher/go-exiftool.(*Exiftool).ExtractMetadata(0xc000136fc0, {0xc00010f2f8, 0x1, 0xc00010f250?})
            C:/Users/Rico/go/pkg/mod/github.com/barasher/[email protected]/exiftool.go:131 +0x3d6
    github.com/ayoisaiah/f2/src.replaceExifToolVariables({0xc000010cf0, 0x22}, {0xc000016d68, 0x12}, {{0xc000162000, 0x2, 0xa}, {0xc0000f16e0, 0x2, 0x2}})
            C:/Users/Rico/go/pkg/mod/github.com/ayoisaiah/[email protected]/src/variables.go:666 +0xfc
    github.com/ayoisaiah/f2/src.(*Operation).replaceVariables(0xc000049a00, 0xc00010f838, 0xc00010f908)
            C:/Users/Rico/go/pkg/mod/github.com/ayoisaiah/[email protected]/src/variables.go:884 +0x4ef
    github.com/ayoisaiah/f2/src.(*Operation).replace(0xc000049a00)
            C:/Users/Rico/go/pkg/mod/github.com/ayoisaiah/[email protected]/src/replace.go:643 +0x23a
    github.com/ayoisaiah/f2/src.(*Operation).handleReplacementChain(0xc000049a00)
            C:/Users/Rico/go/pkg/mod/github.com/ayoisaiah/[email protected]/src/operation.go:572 +0x9e
    github.com/ayoisaiah/f2/src.(*Operation).run(0xc000049a00)
            C:/Users/Rico/go/pkg/mod/github.com/ayoisaiah/[email protected]/src/operation.go:632 +0xaf
    github.com/ayoisaiah/f2/src.newApp.func1(0xc000061740)
            C:/Users/Rico/go/pkg/mod/github.com/ayoisaiah/[email protected]/src/app.go:359 +0x2c9
    github.com/urfave/cli/v2.(*App).RunContext(0xc00013e000, {0x68c530?, 0xc00000e0d0}, {0xc000060040, 0x3, 0x4})
            C:/Users/Rico/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:315 +0x9f5
    github.com/urfave/cli/v2.(*App).Run(...)
            C:/Users/Rico/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:215
    main.main()
            C:/Users/Rico/go/pkg/mod/github.com/ayoisaiah/[email protected]/cmd/f2/main.go:14 +0x65
    
  • Passing options to ExifTool

    Passing options to ExifTool

    I tried using f2 -f '.*.mp4' -r '{{xt.MediaCreateDate}}{{ext}}' -f ':' -r '-' -f ' ' -r '_' to process my video files but one of the files apparently had no MediaCreateDate set.

    Manually inspecting the file using exiftool yielded

    ❯ exiftool 2022-04-24/2022-04-24-12-31-09-0000531.mp4
    ExifTool Version Number         : 11.88
    File Name                       : 2022-04-24-12-31-09-0000531.mp4
    Directory                       : 2022-04-24
    File Size                       : 2.4 GB
    File Modification Date/Time     : 2022:10:24 02:40:46+02:00
    File Access Date/Time           : 2022:10:24 18:46:02+02:00
    File Inode Change Date/Time     : 2022:10:24 18:43:11+02:00
    File Permissions                : rwxrwxrwx
    File Type                       : MP4
    File Type Extension             : mp4
    MIME Type                       : video/mp4
    Major Brand                     : MP4  Base Media v1 [IS0 14496-12:2003]
    Minor Version                   : 2.0.0
    Compatible Brands               : isom, iso2, mp41
    Warning                         : End of processing at large atom (LargeFileSupport not enabled)
    

    Turns out, you can enable it by addding -api LargeFileSupport=1 to the command line:

    ❯ exiftool -api LargeFileSupport=1 2022-04-24/2022-04-24-12-31-09-0000531.mp4
    Media Create Date               : 2022:04:24 10:31:09
    Media Modify Date               : 2022:04:24 10:31:09
    

    Can we make this LargeFileSupport an optional flag or something?

Rclone ("rsync for cloud storage") is a command line program to sync files and directories to and from different cloud storage providers.
Rclone (

Rclone ("rsync for cloud storage") is a command line program to sync files and directories to and from different cloud storage providers.

Jan 5, 2023
Rclone ("rsync for cloud storage") is a command-line program to sync files and directories to and from different cloud storage providers.
Rclone (

Website | Documentation | Download | Contributing | Changelog | Installation | Forum Rclone Rclone ("rsync for cloud storage") is a command-line progr

Nov 5, 2021
A simple tool which you can use to move through your directories from the command line

Fe What is Fe ? Fe is a simple tool which you can use to move through your direc

Jan 1, 2022
cross platform command line tool to list, notify and book vaccine using cowin API

Command line tool to List and Book Vaccine cowin-cli is a simple cli tool to book vaccines and list centers using the COWIN API. It also supports auto

Mar 7, 2022
A command line tool that builds and (re)starts your web application everytime you save a Go or template fileA command line tool that builds and (re)starts your web application everytime you save a Go or template file

# Fresh Fresh is a command line tool that builds and (re)starts your web application everytime you save a Go or template file. If the web framework yo

Nov 22, 2021
Watcher - A simple command line app to watch files in a directory for changes and run a command when files change!

Watcher - Develop your programs easily Watcher watches all the files present in the directory it is run from of the directory that is specified while

Mar 27, 2022
textnote is a command line tool for quickly creating and managing daily plain text notes.

textnote is a command line tool for quickly creating and managing daily plain text notes. It is designed for ease of use to encourage the practice of daily, organized note taking. textnote intentionally facilitates only the management (creation, opening, organizing, and consolidated archiving) of notes, following the philosophy that notes are best written in a text editor and not via a CLI.

Jan 2, 2023
A command line tool for quickly converting Unix timestamps to human readable form.

stamp A command line tool to quickly format a Unix timestamp in a human-readable form. Installation Go is required to build this software. To just bui

Oct 30, 2021
An open-source GitLab command line tool bringing GitLab's cool features to your command line
An open-source GitLab command line tool bringing GitLab's cool features to your command line

GLab is an open source GitLab CLI tool bringing GitLab to your terminal next to where you are already working with git and your code without switching

Dec 30, 2022
A command line tool to prompt for a value to be included in another command line.

readval is a command line tool which is designed for one specific purposeβ€”to prompt for a value to be included in another command line. readval prints

Dec 22, 2021
sttr is command line software that allows you to quickly run various transformation operations on the string.
sttr is command line software that allows you to quickly run various transformation operations on the string.

sttr is command line software that allows you to quickly run various transformation operations on the string.

Sep 21, 2021
From the command line, quickly explore data from a CSV file.
From the command line, quickly explore data from a CSV file.

shallow-explore From the command line, quickly explore data from a CSV file. shallow-explore is a Golang backed command-line tool for iterating over c

Nov 10, 2022
tmux-wormhole - download files and directories with tmux!
tmux-wormhole - download files and directories with tmux!

tmux-wormhole Use tmux and magic wormhole to get things from your remote computer to your tmux. If tmux has DISPLAY set, open the file locally! Demo U

Nov 9, 2022
:zap: boilerplate template manager that generates files or directories from template repositories
:zap: boilerplate template manager that generates files or directories from template repositories

Boilr Are you doing the same steps over and over again every time you start a new programming project? Boilr is here to help you create projects from

Jan 6, 2023
🧹 Safely clean up your local branches
🧹 Safely clean up your local branches

gh poi A gh extension for deleting merged local branches. This extension checks the state of remote pull requests, so it works even when you "Squash a

Dec 29, 2022
mlp is a comman line tool responsible for creating, updating and deleting kubernetes resources based on files generated by Mia-Platform Console.

mlp is a comman line tool responsible for creating, updating and deleting kubernetes resources based on files generated by Mia-Platform Console.

Apr 28, 2022
fofax is a fofa query tool written in go, positioned as a command-line tool and characterized by simplicity and speed.
fofax is a fofa query tool written in go, positioned as a command-line tool and characterized by simplicity and speed.

fofaX 0x00 Introduction fofax is a fofa query tool written in go, positioned as

Jan 8, 2023
Simple and easy to use command line application written in Go for cleaning unnecessary XCode files.

xcclear Say hello to a few extra gigabytes of space on your Mac with xcclear, a simple and easy to use command line application written in Go for clea

Dec 16, 2022
Command-line tool to load csv and excel (xlsx) files and run sql commands
Command-line tool to load csv and excel (xlsx) files and run sql commands

csv-sql supports loading and saving results as CSV and XLSX files with data processing with SQLite compatible sql commands including joins.

Nov 2, 2022