macOS Screenshot App

Example command lines that changes the default save location of the macOS Screenshot app and tweak other preferences:

mkdir ~/Screenshot
defaults write com.apple.screencapture location -string "~/Screenshot"
defaults write com.apple.screencapture name -string "screenshot"
defaults write com.apple.screencapture include-date -bool true
defaults write com.apple.screencapture disable-shadow -bool true
defaults write com.apple.screencapture show-thumbnail -bool false
defaults write com.apple.screencapture capture-mouse-pointer -bool false
killall SystemUIServer
defaults read com.apple.screencapture

This results in:

$ ls -1 ~/Screenshot/
screenshot_2005-01-22_at_07.17.34.png
screenshot_2013-06-27_at_15.43.08.png
screenshot_2017-03-11_at_20.23.31.png
screenshot_2021-10-18_at_13.13.14.png
screenshot_2022-12-01_at_22.43.18.png
To undo/revert to the builtin defaults:
defaults delete com.apple.screencapture
killall SystemUIServer

LaunchAgent workflow

In the example listing of the ~/Screenshot directory shown earlier, all spaces was replaced by underscore. This is not supported by the screenshot app, but we can utilize LauchAgents to monitor the ~/Screenshots directory and do any kind of "post-production" on the images and videos as they arrive.

Here is a LaunchAgent Property List (plist), that shows how we might replace the spaces with underscores, as a shell one-liner, but any complex script or program could be called instead:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>ScreenshotRename</string>
        <key>ProgramArguments</key>
        <array>
            <string>/bin/bash</string>
            <string>-c</string>
            <string>ls -1rt screenshot\ * | xargs -I{} bash -c 'mv "{}" "$(tr " " "_" &lt;&lt;&lt;"{}")"'</string>
        </array>
        <key>WorkingDirectory</key>
        <string>/Users/CHANGE_HERE/Screenshot/</string>
        <key>WatchPaths</key>
        <array>
            <string>/Users/CHANGE_HERE/Screenshot/</string>
        </array>
    </dict>
</plist>
download: dk.thrysoee.screenshot_rename.plist

Download the plist, copy it to ~/Library/LaunchAgents, and run the following to activate it:

for c in stop unload load start; do launchctl $c ~/Library/LaunchAgents/dk.thrysoee.screenshot_rename.plist; done