Skip to main content

Filename Studio Code

Project description

๐Ÿงฉ FSCode (Filename Studio Code) โ€” Manage Your Filesystem with Your Editor

English ็ฎ€ไฝ“ไธญๆ–‡

PyPI License: MIT GitHub Stars

Turn your VS Code / Vim into a file operations IDE. Generate safe, reviewable batch scripts (rename/delete/create/copy/symlink, etc.) from a "visual manifest".

๐Ÿ Quick Start

pip install PyFSCode
find ./photos -name "*.jpg" | fscode --editor='code -w' *.txt

โšก๏ธ Video Demo

Video Demo

๐Ÿค” Why This Tool?

Batch file operations (rename / delete / create / copy / symlink) are the most common yet error-prone tasks in the command-line world:

  • mv, rm, cp, touch, ln, ln -s commands are very clumsy and error-prone for batch operations.
  • Manually writing for loops and sed for renaming carries a heavy mental load.
  • Swapping filenames is very complex and often impossible even in a GUI.

fscode provides a more powerful and unified solution.

๐Ÿš€ What Can It Do?

fscode lets you use your editor to plan batch file operations and safely generate a script for execution.

โœจ Core Features

  • ๐Ÿ’ป Editor as UI โ€” Use the powerful features of VS Code/Vim (multi-cursor, regex, macros) to manage files;
  • ๐Ÿง  Smart Dependency Handling โ€” Automatically resolves swap, cycle, and move conflicts;
  • ๐Ÿ›ก๏ธ Safe and Controllable โ€” Does not modify files directly, only generates a reviewable file operation script;
  • ๐Ÿงฐ Full Features Support โ€” Supports creation, copying, moving, deleting, renaming and Symlink.
  • ๐ŸŽจ Custom Commands - For example, you can replace touch with ai-generate to create files with content.
  • ๐Ÿท๏ธ Custom Command Prefix - For example, you can use sudo as a prefix for the output script.

๐Ÿ“ฆ Installation

pip install PyFSCode
# Or using uv
uv tool install PyFSCode

๐Ÿง‘โ€๐Ÿ’ป Usage Example

๐Ÿ’ป Step 1: Input Files from Command Line

โš ๏ธ [NOTE]: If your $VISUAL or $EDITOR environment variable points to VS Code, please use --editor='code -w' to wait for the window to close before continuing.

Method 1: Input from Pipe

find ./photos -name "*.jpg" | fscode

Method 2: Pass as Arguments

fscode *.jpg *.txt

Method 3: Pipe + Arguments

find ./photos -name "*.jpg" | fscode *.jpg *.txt

Method 4: Use Custom Commands (Advanced Users)

fscode --is_exchange --inode --editor='code -w' --create='new' --remove='del' --move='mov' **

๐Ÿ“„ Step 2: Modify Filenames in the Editor

The editor will open a file similar to this:

# <ID> <Path> [args...]
1 photos/vacation.jpg
2 photos/birthday.jpg
3 project/notes.txt
4 "photos/old picture.jpg"

You just need to modify it:

# File Operation Plan
# ... (comments omitted) ...
#
# My Modifications

# 1. Rename (Edit the path)
1 photos/Paris_Vacation_2025.jpg

# 2. Move (Edit the path)
3 archive/old_notes.txt

# 3. Copy (Duplicate the line, use the same ID 2)
2 photos/birthday.jpg
2 photos/backup_birthday.jpg

# 4. Delete (Delete or comment out the line with ID 4)
# 4 "photos/old picture.jpg"

# 5. Create (Add a new line, ID is 0, quotes are needed due to spaces)
0 'new_project/new note.txt'

# 6. ๅˆ›ๅปบ็ฌฆๅท้“พๆŽฅ
0 note.txt 'new_project/new note.txt'

โšก Step 3: Execute

After saving and closing the editor, FSCode will generate a script:

#!/bin/sh
cp photos/birthday.jpg photos/backup_birthday.jpg
mv photos/vacation.jpg photos/Paris_Vacation_2025.jpg
mv project/notes.txt archive/old_notes.txt
rm 'photos/old picture.jpg'
touch 'new_project/new note.jpg'
ln -snT 'new_project/new note.txt' note.txt

After reviewing it for correctness, execute it:

source ./file_ops.sh

โœ… All changes can be safely reviewed before execution.

๐Ÿ“„ Help Documentation

INFO: Showing help with the command 'fscode -- --help'.

NAME
    fscode - Main execution flow.

SYNOPSIS
    fscode <flags> [PATHS]...

DESCRIPTION
    Main execution flow.

POSITIONAL ARGUMENTS
    PATHS
        Type: str
        File paths to process. Can be provided as arguments or via stdin.

FLAGS
    --editor=EDITOR
        Type: str
        Default: 'code'
        The editor command to use (e.g., "msedit", "code -w"). Defaults to $VISUAL, $EDITOR, or 'code -w'.
    -o, --output_script=OUTPUT_SCRIPT
        Type: str | pathlib._local.Path
        Default: 'file_ops.sh'
        Path to write the generated shell script.
    --edit_suffix=EDIT_SUFFIX
        Default: '.sh'
        Suffix for the temporary editing file. Defaults to '.sh'.
    -n, --null=NULL
        Default: False
        Whether to use null-separated input.
    --copy=COPY
        Default: 'cp'
        The command to use for copy operations.
    --move=MOVE
        Default: 'mv'
        The command to use for move operations.
    --exchange=EXCHANGE
        Default: 'mv --exchange'
        The command to atomically swap filenames. If you modify to a custom command, is_exchange is automatically enabled.
    -r, --remove=REMOVE
        Default: 'rm'
        The command to use for remove operations.
    --create=CREATE
        Default: 'touch'
        The command to use for create operations.
    --create_args=CREATE_ARGS
        Default: 'ln -snT'
        The create command with extra arguments (e.g., for symlinks).
    --move_tmp_filename=MOVE_TMP_FILENAME
        Type: Optional[str | None]
        Default: None
        Path for the temporary filename used during cycle move operations.
    --is_exchange=IS_EXCHANGE
        Default: False
        Use swap for circular moves and avoid using temporary files. Currently only higher versions of linux are supported.
    --inode=INODE
        Default: False
        Whether to display inode and hard link count. When adding a new row, the Inode and Links columns must be set to None.
    --cmd_prefix=CMD_PREFIX
        Type: Optional[str | None]
        Default: None
        An optional command prefix to prepend to all commands.

๐ŸŒˆ Other Recommended Tools

๐ŸŸ fish alias example

alias -s fscode "fscode --is_exchange --editor='code -w' --create='new' --remove='del' --move='mov'"

๐Ÿชถ Tips

  • To use hard links, you can use --inode to display hard link information. Use --cp='ln -snT' to replace the cp operation.
  • To use soft links, you can modify the [args...] column and set the ID to 0; fscode will then automatically use create_args to create them. If you need to force-create and overwrite, you must manually change --create_args='ln -snTf'. Currently, only the "create" function supports custom arguments. If the project gets over 1000 stars โญ, we will consider adding custom arguments for all operations.
  • To use sudo, you can set --cmd_prefix=sudo, which will add this prefix to all commands.

๐Ÿ”— Feature Comparison

Tool โœ…Count Cross-editor Interactive Output Script Custom Commands Move Swap/Ring Copy Delete Create Symlink Hardlink
edir 5 โœ… โŒ โŒ โŒ โœ… โœ… โœ… โœ… โŒ โŒ โŒ
renameutils 5 โœ… โŒ โŒ โœ… โœ… โœ… โœ… โŒ โŒ โŒ โŒ
pipe-rename 3 โœ… โŒ โŒ โŒ โœ… โœ… โŒ โŒ โŒ โŒ โŒ
massren 4 โœ… โŒ โŒ โŒ โœ… โœ… โŒ โœ… โŒ โŒ โŒ
dired 9 โŒ โœ… โŒ โœ… โœ… โœ… โœ… โœ… โœ… โœ… โœ…
acme 8 โŒ โœ… โŒ โœ… โœ… โŒ โœ… โœ… โœ… โœ…1 โœ…1
up 3 โŒ โœ… โœ… โœ… โŒ โŒ โŒ โŒ โŒ โŒ โŒ
fscode 10 โœ… โŒ โœ… โœ… โœ… โœ… โœ… โœ… โœ… โœ… โœ…2
Note
  1. Due to the nature of Plan 9, the system doesn't use "link" but rather "bind".
  2. Just set --copy='ln -nTf' and --inode, and you can handle hard links just like regular copying.

Appendix

๐Ÿ“„ License

This project is open-sourced under the MIT License.

๐Ÿชถ Tips

Like this project? Please give it a โญ๏ธ Star. Your support helps more people discover it.

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

pyfscode-1.0.0.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyfscode-1.0.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file pyfscode-1.0.0.tar.gz.

File metadata

  • Download URL: pyfscode-1.0.0.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.8

File hashes

Hashes for pyfscode-1.0.0.tar.gz
Algorithm Hash digest
SHA256 d98601acf208f431e820ec3b795229a1299eb306eabfcc901a94c24b83c34d63
MD5 cda356a2f5abd43fb3a4c8c23b36b95a
BLAKE2b-256 1a6a5f7073301516a81406fd418386eb2654f23f840f40b396925b9cbcdb3e99

See more details on using hashes here.

File details

Details for the file pyfscode-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: pyfscode-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.8

File hashes

Hashes for pyfscode-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ef4ae0f46bb5ce67da7d0462ff5cf6241581794a169d06a8a0b542aeede774f5
MD5 6a8eb7aa06c9df22a0e00b448acb5c7c
BLAKE2b-256 cc2431cab8f5d7d4a3d1ed4b99aa0e6631b24ce3c2ad0ac99e0993f0b19c6c3b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page