[HN Gopher] Useful built-in macOS command-line utilities
___________________________________________________________________
Useful built-in macOS command-line utilities
Author : yen223
Score : 657 points
Date : 2024-11-06 05:51 UTC (17 hours ago)
(HTM) web link (weiyen.net)
(TXT) w3m dump (weiyen.net)
| vbezhenar wrote:
| Few additions.
|
| open -n file.pdf : opens new instance of Preview application
| which is useful if you want to open the same file twice (for
| example to look at different pages at once).
|
| caffeinate -d : prevents display turning off, useful if you want
| to look at display without moving mouse.
| wwader wrote:
| open -a is nice, i use it with alias, ex: alias
| qt='open -a "quicktime player"' alias vlc='open -a "vlc"'
| FabHK wrote:
| At least for me (I've installed vlc via homebrew), there is a
| vlc binary in the PATH, and I can just vlc <filename>
| qrios wrote:
| The point here is to open a document with an app not
| assigned as default for the given mime-type by file name
| extension.
| mjs wrote:
| Does `open` give focus? It used to, but since a few releases
| ago the app opens in the background, which is pretty annoying.
|
| My poor workaround is to use osascript: `tell application
| "System Events" to set frontmost of process "Finder" to true`
| masswerk wrote:
| Apparently, it does. There is a -g flag (background) to
| prevent focus.
| justletmein wrote:
| Isn't open opening apps in the background a consequence of
| having "secure keyboard entry" enabled in Terminal.app?
| troupo wrote:
| `caffeinate -disu` is the best combination (that is, enable all
| options): your laptop won't go to sleep, won't dim the screem
| etc.
| 1ncorrect wrote:
| I use this all the time:
|
| open -a <GUI Application> <File>
|
| Handy for distinguishing between editing and consuming media.
| alsetmusic wrote:
| Also, `cd .` to open the current directory in a Finder window.
|
| Not mine (found online years ago), but here's the opposite.
| `cd` into the frontmost Finder window: cd
| "$(osascript -e 'tell app "Finder" to POSIX path of (insertion
| location as alias)')";
| kps wrote:
| You mean `open .`
| alsetmusic wrote:
| Yeah, I had just woke up. Drat.
| sneak wrote:
| You can also just drag the proxy icon onto the terminal
| window for its path, ie "cd " <drop>, enter.
| kstrauser wrote:
| I use that all the time. You can also cmd-c copy a file in
| Finder then paste into the terminal to get its path.
| hk1337 wrote:
| open -a "Finder" . - open Finder in the current directory.
|
| Standard apps usually just need the name, like Finder and
| Safari but you can also specify the path
| "/Applications/DifferentFinder.app"
| ssttoo wrote:
| `open .` works for me too
| hk1337 wrote:
| Yeah, I scrolled a bit and noticed that. Never thought
| about using just that.
| nextos wrote:
| Finder is pretty good, and it's handy to be able to open it
| from the terminal. But I find it super annoying it litters
| everything with .DS_Store files and there is no way to turn
| that off, except for external and network drives. Aside from,
| obviously, using a different file manager. Very un-Apple.
| nutrie wrote:
| Actually, .DS_Store is very Apple indeed (not that I care
| much).
| dwaite wrote:
| The .DS_Store files are not Finder specific; Apple treats
| everything as a file (including folders), and it exists to
| supply folders and the files within them with metadata.
|
| It is just the first time the .DS_Store file is needed is
| often when the folder is touched by Finder.
| codazoda wrote:
| .DS_Store is also a bug. I'm not sure why it hasn't been
| fixed. It's history is quite interesting but I don't recall
| where I read about it.
| mdean wrote:
| https://www.arno.org/on-the-origins-of-ds-store linked
| from original Hacker News thread:
| https://news.ycombinator.com/item?id=40870357
| seec wrote:
| Well those files are to keep the view/presentation
| settings.
|
| I guess you could do that centrally with some sort of
| database but that would open another can of worms; and most
| importantly you wouldn't be able to transfer a folder and
| keep its Finder presentation intact.
|
| Nowadays it's not as useful because of the App Store but
| when software was only released as .dmg images, it became
| expected to open a nice layout with graphics presenting the
| app and a shortcut to the App folder that you would
| drag'n'drop the app bundle to.
|
| This presentation relies of .DS_Store to work.
|
| There are some other use cases like that, it all comes down
| to a simple fact: Apple has always cared a lot more about
| how things look than Microsoft ever did, this is a perfect
| example.
| vbezhenar wrote:
| There are extended attributes which could be used for
| this task.
| fragmede wrote:
| you can just open .
|
| unless you've reconfigured something else to open
| directories, which most people haven't.
| ilyagr wrote:
| You can also `open -R file` to select that file in Finder.
| impalallama wrote:
| caffeinate -d is incredibly useful for work... uh reasons
| JasserInicide wrote:
| Jiggler is better for that at least from a set-it-and-forget-
| it perspective vs. caffeinate where you have to manually set
| it.
| seec wrote:
| That's one of macOS pitfalls: the inability to open 2 instances
| of the same app, simply using the default GUI is annoying
| sometimes.
|
| I think Windows is right in that matter...
| beancookies wrote:
| Another useful caffeinate tip is the `-w` option.
|
| You can use it to pass a pid to keep the computer awake until
| that process completes. I use it for longer-running scripts
| that I don't want interrupted
| trynumber9 wrote:
| sips https://ss64.com/mac/sips.html
| janandonly wrote:
| I have thousands of old photos that preview can open, but I
| can't upload them into the photo.app because the file format is
| wrong. I'm going to try and use SIPS to convert them all into
| png first and then add to photo.app. Thanks for this pointer.
| FabHK wrote:
| Similarly, I've had trouble getting audio files into a format
| that the Books app understands (for ebooks), until I found
| afconvert -v -s 3 -f m4bf filename.mp3
| yen223 wrote:
| sips looks really cool, thanks for pointing this out.
|
| Not gonna lie, I missed this because I thought it was related
| to macOS SIP, System Integrity Protection. Which is something I
| am deeply uninterested in.
| jftuga wrote:
| Nice. After reading the man page, I see that it can be used to
| convert image file formats: sips -s format
| png photo.HEIC --out photo.png
|
| or resizing: sips -z 300 600 original.jpg
| --out new.jpg
| hk1337 wrote:
| That's cool. I wish it could convert webp images.
| selectnull wrote:
| TIL: caffeinate
|
| Very useful.
| vallode wrote:
| Indeed, many applications I would expect to prevent sleeping
| (some audio playback ones, games, etc.) don't implement this. I
| assume it's a case of Apple's APIs changing over the years and
| not everyone catching up/caring. At one point I had downloaded
| Amphetamine[^1] but it is much nicer to just use the terminal
| here.
|
| [^1]: https://apps.apple.com/us/app/amphetamine/id937984704
| m1keil wrote:
| Also https://github.com/newmarcel/KeepingYouAwake
| galad87 wrote:
| The "newest" and still supported low level API is almost 14
| years old: https://developer.apple.com/documentation/iokit/ki
| opmasserti... https://developer.apple.com/documentation/iokit
| /kiopmasserti...
| keybored wrote:
| I was able to install a `caffeine` package with Apt on Linux.
| In that one the `caffeinate` command is supposed to be run with
| another command. While the `caffeine` command does what macOs
| `caffeinate` does.
| huskyr wrote:
| For a GUI version, Amphetamine is quite nice (and free).
| https://apps.apple.com/us/app/amphetamine/id937984704?mt=12
| neevans wrote:
| yes amphetamine I use regularly when I want to charge my
| android phone during travel with lid closed.
| walthamstow wrote:
| That's interesting, I have never needed to do that. My
| Pixels have always just charged even if the lid is closed,
| on Intel and Apple Silicon machines. I like to travel light
| so I often use my laptop as a battery bank instead of
| carrying a seperate one.
| weberer wrote:
| It would be cool to have this activate when a Jupyter notebook
| is currently running a cell, and deactivate automatically when
| its finished.
| eszed wrote:
| This can be done by passing a PID. I believe there are other
| options, as well. (Not at my computer to look it up right
| now.) I haven't used those features "manually", but I have in
| scripts that I expect to generate long-running processes.
| al_borland wrote:
| While it may avoid sleep, it doesn't prevent inactivity, in my
| experience. For instance, my chat app at work will still show
| me inactive while running caffeinate. I have to do non-
| interactive training semi-regularly and need to interact to
| keep from looking like I'm away from my desk.
| latexr wrote:
| Have you used the `-u` flag? From the manual:
| -u Create an assertion to declare that user is active.
| mathieuh wrote:
| Doesn't work with Slack at least. I've had an iTerm window
| running `caffeinate -disu` for years. I think it used to
| work and stopped working in the last few months.
| pantulis wrote:
| afconvert is pretty nifty for audio format conversion.
| subarctic wrote:
| is it better than ffmpeg in any way?
| jammmety wrote:
| Apple's AAC encoders are often touted as being the 'best',
| quality-wise:
| https://hydrogenaud.io/index.php/topic,119876.0.html
| lozf wrote:
| As jammmety said; for AAC encoding yes, but don't worry - you
| can have ffmpeg use that encoder to get the best of both.
| FabHK wrote:
| afconvert is the only way I've managed to turn mp3s into
| something that Books would accept as an audiobook.
| afconvert -v -s 3 -f m4bf ....mp3
| urbandw311er wrote:
| Great tip about the `security` command, a new one for me.
| semanticist wrote:
| Want to scan the local wifi networks from the command line, and
| get useful information like signal strength?
|
| /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A
| /Resources/airport -s
|
| I set a shell alias so I can just do `airport -s`. I've no idea
| why this is hidden away inside some framework and not in a
| directory which is in the normal path, but there you go.
| stunthamsterio wrote:
| FWIW that appears to be soon deprecated according to MacOS
| 15.2:
|
| WARNING: The airport command line tool is deprecated and will
| be removed in a future release. For diagnosing Wi-Fi related
| issues, use the Wireless Diagnostics app or wdutil command line
| tool.
| semanticist wrote:
| Oh, that's a pity. I'm pretty bad at keeping up to date on
| MacOS releases, but I should probably start figuring out
| `wdutil` so that my muscle memory is adapted before I've got
| no choice!
| WorldPeas wrote:
| is there a way to do monitor mode scanning with wdutil like
| the `airport -s` command? asking for a friend...
| nxobject wrote:
| If you want the _least_ useful macOS commandline utility,
| 'pdisk' is: "...a menu driven program which
| partitions disks using the standard Apple disk
| partitioning scheme described in "Inside Macintosh: Devices".
| It does not support the Intel/DOS partitioning scheme[.]"
| mcc1ane wrote:
| Related - https://news.ycombinator.com/item?id=36491704 "macOS
| command-line tools you might not know about"
| tzs wrote:
| Here's a handy use I've found for mdfind.
|
| Say you've got a directory that has scripts or data files related
| to some thing you do. For example I've got several scripts that I
| use when I scan books with my book scanner. I only need these
| when doing book scanning stuff so don't want to put them
| somewhere in $PATH. I want to be able to easily run them from
| scripts that aren't in that directory, but I don't want to hard
| code the path to that directory.
|
| Solution: in the directory with the book scanning scripts I make
| a file named ID that contains a unique string. I currently use 16
| byte random hex strings [1].
|
| I have this script, named find-dir-by-ID, somewhere in $PATH:
| #!/bin/zsh ID=${1:?Must specific ID} IDSHA=`echo $ID
| | shasum | cut -d ' ' -f 1` mdfind $ID 2>/dev/null | grep
| /ID | while read F; do FSHA=`shasum $F | cut -d ' ' -f
| 1` if [ $IDSHA = $FSHA ]; then dirname $F
| exit 0 fi done exit 1
|
| If some script wants to use scripts from my book scanning script
| directory, it can do this: SCRIPT_DIR=`find-dir-
| by-ID 54f757919a5ede5961291bec27b15827` if [ ! -d
| $SCRIPT_DIR ]; then >&2 echo Cannot find book scanning
| scripts exit 1 fi
|
| and then SCRIPT_DIR has the full path to the scanning script
| directory.
|
| The IDs do not have to be hex strings. If I'd thought about it
| more I probably would have made IDs look like this "book-
| scanning:54f757919a5ede59" or "arduino-tools:3b6b4f47bf803663".
|
| [1] here's a script for that: #!/bin/sh
| N=${1:-8} # number of bytes xxd -g $N -c $N -p -l $N <
| /dev/urandom
| jeffhuys wrote:
| Why not just a directory with subdirectories by ID? No mdfind
| needed, no problems with just-created directories, no wait, etc
| tzs wrote:
| You mean something like having ~/well-known-stuff and under
| that having a 54f757919a5ede5961291bec27b15827 directory with
| the book scanning scripts and so on?
|
| That could work fine, but generally the directories I've used
| this on are directories that I want to have somewhere else,
| and with a reasonable name. Usually the directories came
| first and various other things in fixed relative positions
| were using them, and then later I wanted to use them from
| elsewhere and added the ID.
|
| I suppose ~/well-known/stuff/54f757919a5ede5961291bec27b15827
| could by a symbolic link to the original.
|
| The mdfind approach does have the advantage that if I
| reorganize things and move the directory it keeps working.
| huskyr wrote:
| I've never heard of networkQuality, that's seems like quite a
| useful tool.
| latexr wrote:
| For reference, it's been there since macOS 12. You may also
| like to know that this year (macOS 15) they added jq.
| huskyr wrote:
| I didn't know that, thanks!
| dmd wrote:
| Unfortunately, it's not actually very useful, as whatever
| server they're using on the other end is severely constrained.
| networkQuality gives me:
|
| Downlink: 884.856 Mbps, 198 RPM - Uplink: 13.238 Mbps, 198 RPM
|
| whereas speedtest (whether to the official speedtest server OR
| a friend's home server in their basement!) gives ~700 Mbps
| uplink.
| lladnar wrote:
| try networkQuality -s
|
| That's a more apples to apples comparison to speedtest.net;
| Separate upload and download tests.
| dmd wrote:
| Somewhat better, 867/114, but still not the symmetric I get
| on typical real workloads.
| Doctor_Fegg wrote:
| fs_usage is my favourite - find out what's thrashing the disk.
| (Usually Spotlight or Spark...)
| lagrange77 wrote:
| Not a command, but a little known feature of the Terminal app:
|
| (shift+command+K) or Menu 'Shell' -> 'New Remote Connection...'
|
| opens a SSH, S(FTP), TELNET connection manager window!
| e40 wrote:
| Sort of like command+k in the Finder, connects to a server. You
| can type in vnc://host or vnc://localhost:port... the latter is
| for VNC to hosts via an SSH tunnel.
|
| It's quite a good VNC client, too.
| FabHK wrote:
| And sometimes handy: shift+cmd+. to toggle showing hidden (dot)
| files in Finder.
| l33tman wrote:
| As they seem to have removed Bluetooth Explorer and all ways to
| get diagnostic info about the bluetooth system and/or change
| codecs and settings, does anybody know any good cmdline ways in
| later mac osxes to do the same?
|
| For example I'm having a problem that comes and goes now and then
| where Bluetooth audio is 300 ms delayed compared to the video
| playback everywhere _except_ in Youtube on Safari, very strange.
| It 's good for a few months then suddenly it becomes unusable,
| then back to zero sync delay after a few months.
|
| I was thinking this might be related to CODEC selections etc or
| some hidden setting that might get changed which we normally
| aren't allowed to determine :)
|
| (btw I know there is a difference between latency and
| synchronization - latency might be unavoidable but video sync
| should always be able to compensate - I got curious on how
| exactly that works, where in the app / SDK / OS pipeline does the
| a/v sync happen on a Mac?)
| leecoursey wrote:
| See:
| https://chatgpt.com/share/672b94e1-4c20-8001-aea9-9371b4e9d9...
|
| Also: https://github.com/toy/blueutil
| l33tman wrote:
| Thanks.. but that github program only lists the same info you
| get if you command-click on the BT icon in the menu bar. It
| basically only shows the device name.
|
| I guess filtering the streaming log entries in the Console
| app gives some info.
| 10729287 wrote:
| It misses the most important of them all, if you are used to copy
| content to usb drive for reading on a multimedia player :
| dot_clean -m
| __m wrote:
| $ say Hello
|
| To scare your teammates when you are logged in remotely
| optionally with
|
| $ osascript -e "set volume output volume 100"
| pseufaux wrote:
| I'll add `plutil` to the list. It's great for reading plist
| files, but did you know it can parse json too?
|
| /usr/bin/plutil -extract your.key.path raw -o - - <<<
| "$jsoninput"
|
| (obviously, less useful now that `jq`is built in)
| jonpalmisc wrote:
| ; which jq /usr/bin/jq ; jq jq -
| commandline JSON processor [version 1.6-159-apple-
| gcff5336-dirty]
|
| Wow. When did `jq` start shipping by default? TIL
| pseufaux wrote:
| Starting in macOS 15, it was quietly included.
|
| Glad to spread the good word ;)
| hk1337 wrote:
| > obviously, less useful now that `jq`is built in
|
| Hold up, what?
| Bengalilol wrote:
| There is also pmset which is very useful (since macOS doesn't
| give a UI counterpart) https://support.apple.com/en-am/guide/mac-
| help/mchl40376151/...
| yen223 wrote:
| Oh this is pretty neat, thanks for sharing!
|
| https://ss64.com/mac/pmset.html
| jftuga wrote:
| I have this .zshrc function to track the battery and charging,
| which uses pmset: function batt-info() {
| echo system_profiler SPPowerDataType | grep Wattage
| | cut -c 7- echo pmset -g batt
| }
| redman25 wrote:
| I've found reliably "turning on" with pmset to be hit or miss.
| I can't remember the gotcha I ran into if it was that you had
| to have your laptop lid open or something else...
| gkfasdfasdf wrote:
| pbcopy and pbpaste are handy, for a version that works over ssh
| connections there is osc: https://github.com/theimpostor/osc
| pmarreck wrote:
| since I switch between linux and macos a lot I wrote a dotfile
| function called "clip" that will work the same on both. nice
| thing is it will automatically paste if nothing is piped to it
| to copy so there's no need to use separate commands... although
| I just realized it might be nice to have a "passthrough" mode
| that both copies and pastes if you add this to a pipeline in
| order to capture some intermediate part to the clipboard
| if [[ "$(uname)" == "Darwin" ]]; then clip() {
| [ -t 0 ] && pbpaste || pbcopy } else # assume
| linux if not macos clip() { [ -t 0 ] &&
| xclip -o -selection clipboard || xclip -selection clipboard
| } fi
| gkfasdfasdf wrote:
| That's handy, thanks! `osc copy` may also take args for files
| to copy to the clipboard, but in the absence of that and no
| data on stdin it maybe should switch to paste.
| hk1337 wrote:
| I went the route of managing a different set of dotfiles for
| linux and macOS. Same repository, just different branches.
|
| Also, falling back to using oh-my-zsh functionality.
| hk1337 wrote:
| I copied this functionality to linux it's been so useful.
| pak9rabid wrote:
| At my job I have to work with a lot of JSON that's usually
| minimized. This command has single-handedly saved my sanity:
|
| $ pbpaste | jq | pbcopy
|
| Then I can paste it into whatever text editor I want and it's
| all nice & pretty-printed for me.
|
| Bonus is that I don't have to change the command at all, just
| copy the minimized JSON to the clipboard (say from DBeaver, for
| example), then hit the 'up' arrow and enter.
| mfonda wrote:
| I never knew that jq without any arguments pretty-printed
| JSON. Very useful, and great tip to combine with
| pbcopy/pbpaste.
| reaperducer wrote:
| mdls shows a file's metadata.
|
| I use it most often for pulling lat lon data from photos.
| extraduder_ire wrote:
| Looks like a lot of these have linux equivalents that could be
| aliased. I wonder if anyone's made a set of those for regular
| macos users who occasionally use something else.
| westurner wrote:
| upgrade_mac.sh:
| https://github.com/westurner/dotfiles/blob/develop/scripts/u... :
| upgrade_macos() { softwareupdate --list
| softwareupdate --download softwareupdate --install --all
| --restart }
| zazaulola wrote:
| To find what causes your laptop drains its battery, you can use
| sudo powermetrics
| unsupp0rted wrote:
| Thanks Spotify:
|
| coreaudiod is using very high CPU at 111.90 ms/s
|
| I'm on a 16" M1 Macbook Pro 16 gig.
| seec wrote:
| If spotify use the coreaudio daemon for the decoding it can
| be spotify's fault for this CPU usage, don't you think ?
|
| Maybe they are using it "wrong" but Apple Music isn't exactly
| light on ressource either...
| zitterbewegung wrote:
| The terminal version of Disk Utility is actually much better than
| the GUI (it doesn't hang and the app is glitchy.
|
| Docs are at https://ss64.com/mac/diskutil.html
| zazaulola wrote:
| `pdisk` might be more convenient if you've worked with `gdisk`
| on ArchLinux
|
| https://manpagez.com/man/8/pdisk/
| e40 wrote:
| diskutil does more than edit partitions, though.
| Tsiklon wrote:
| If you have a modern Mac you have very little business using
| `pdisk`. It is only for editing disks mapped with an "Apple
| Partion Map". This is obsolete replaced in practice by GPT on
| modern apple machines.
| zazaulola wrote:
| `gdisk` supports GPT, but to partition system SSD you need
| to deactivate System Integrity Protection:
| gdisk /dev/disk0
| e40 wrote:
| Or "man diskutil"
| seec wrote:
| Disk Utility used to be excellent, a model of how an app should
| be. But then they rewrote it in Swift and now it's just bad.
|
| Apple promotes Swift heavily but the results are not really
| encouraging. I don't think the "so-so" results are entirely
| because of Swift (probably due to newer, less battle tested
| software and also newer/younger devs) but still the fact is,
| all the not-so-great new software from Apple came with Swift
| rewrites, hard to not make a connection...
| antononcube wrote:
| I would like to also recommend the app: hear
| (macOS speech recognition and dictation via the command line)
|
| See: https://sveinbjorn.org/hear
|
| (Uses built-in macOS capabilities for transcription from audio to
| text.)
| xpe wrote:
| Its open source GitHub repo at
| https://github.com/sveinbjornt/hear
|
| Man page at https://sveinbjorn.org/files/manpages/hear.1.html
|
| > (Uses built-in macOS capabilities for transcription from
| audio to text.)
|
| Question (to self, currently researching)... Which
| capabilities? Released when? I ask because Apple Intelligence
| has expanded the use of audio transcription features.
|
| Answer: `hear` uses SFSpeechRecognizer [1] which has been
| available since macOS 10.15. I'm not yet sure how it relates to
| Apple Intelligence transcription services.
|
| Note: "speech recognition is a network-based service" which
| perhaps suggests Apple Intelligence (the marketing term, not an
| Apple Developer term, I don't think) uses it as well
|
| [1][
| https://developer.apple.com/documentation/speech/sfspeechrec...
| e40 wrote:
| I thought I recognized the name of the developer! The person
| that brought us Platypus! Nice.
| alsetmusic wrote:
| I used Platypus to make my simple command line tools
| accessible to coworkers who considered the command line to be
| "too much" to learn. I've loved that app for close to two
| decades.
| hk1337 wrote:
| > which hear
|
| > hear not found
|
| macOS 15.1
| dmix wrote:
| Same, but there is the `say` command which you can cat a text
| file into and it will say it outloud
|
| https://ss64.com/mac/say.html
| avtar wrote:
| Hear itself isn't a built-in utility.
|
| > hear is a command line interface for the built-in speech
| recognition capabilities in macOS
|
| Have you gone through the installation process?
| https://github.com/sveinbjornt/hear?tab=readme-ov-
| file#insta...
| avernet wrote:
| Someone needs to create a brew formula for `hear`.
| llimllib wrote:
| I maintain a more comprehensive list here:
| https://notes.billmill.org/computer_usage/mac_os/mac_os_comm...
|
| But I don't have uuidgen!
| simonw wrote:
| I'm fascinated by "sips" which has a full JavaScript
| interpreter built into it for rendering images using an
| entirely undocumented (as far as I can tell) Canvas-like API:
| https://til.simonwillison.net/macos/sips
| cantSpellSober wrote:
| TinkerTool provides a GUI that runs some useful commands under
| the hood
|
| https://www.bresink.com/osx/0TinkerTool/download.php
| adolph wrote:
| > If you store your secrets in the Keychain (and you should!)
|
| As part of the OS, Keychain suffers from the same sorts of sharp
| edges as using a built-in interpreter. An alternative is to use a
| password manager. Below is an example of the tools available in
| one.
|
| https://developer.1password.com/docs/cli/get-started/#step-1...
| joemi wrote:
| Would you mind expanding on what these "sharp edges" are that
| you're warning about? I'm not really sure what you mean by
| this. Keychain has served me (and I imagine many others) really
| well for a while.
| xpe wrote:
| My non-built-in CLI utility recommendations, none of which are
| macOS specific:
|
| * atuin - TUI for shell history, backed by SQLite -
| https://github.com/atuinsh/atuin
|
| * LSD (LSDeluxe) - rewrite of `ls` - https://github.com/lsd-
| rs/lsd
|
| * ripgrep - https://github.com/BurntSushi/ripgrep
|
| * fzf - command-line fuzzy finder that enhances file search,
| command history search, and more -
| https://github.com/junegunn/fzf
|
| Notes:
|
| - To get pretty extra file/folder symbols with LSD, you'll
| probably need to install some special fonts.
|
| - You can use `fzf` and `ripgrep` together.
| yen223 wrote:
| I can vouch for fzf being a game-changer if you spend a lot of
| time in the CLI
| kstrauser wrote:
| My problem with fzf is that it's so broadly useful that I
| forget it exists.
| doodpants wrote:
| This article contains links to https://ss64.com/ , which is an
| amazing resource that I wish I'd known about sooner!
| yen223 wrote:
| 100% That's why I made it a point to share that page.
|
| I still get a ton of mileage from reading the macOS How-to page
| https://ss64.com/mac/syntax.html
| ss64 wrote:
| Thanks for the kind words, I'll be scanning this thread to see
| if there's anything new that I've missed.
| onnimonni wrote:
| What I'm really missing still is a cli to iCloud stored
| passwords. AFAIK 'security' cli can't access the credentials
| stored in the cloud. This would be helpful to store secrets
| outside of git but would still allow scriptable access to them
| similarly as 1password cli 'op' has.
| zikduruqe wrote:
| locate
|
| https://ss64.com/mac/locate.html
|
| locate searches a database for all pathnames which match the
| specified pattern. The database is recomputed periodically,
| (about once a week) and contains the path-names of all files
| which are publicly accessible.
| emmelaich wrote:
| The database is not set up by default.
|
| Your better bet on MacOS is to use `mdfind -name ....`
| kstrauser wrote:
| I have that aliased to `locate` on mine. It's not exactly the
| same but it gets me 99% of the way there.
| chasil wrote:
| Since Apple spent so much effort in getting certified:
|
| https://www.opengroup.org/openbrand/register/
|
| These are all guaranteed to work:
|
| https://pubs.opengroup.org/onlinepubs/9699919799/utilities/
|
| (I may not have linked to the precisely correct version.)
| jlv2 wrote:
| "I like to look at the list of macOS Bash commands."
|
| Sigh. These are shell commands, not "Bash commands".
| alexvitkov wrote:
| These are programs, not shell commands.
| awkward wrote:
| Even calling them "zsh commands" would have been more accurate.
| bowsamic wrote:
| If you're going to correct someone snarkily, don't make a
| similar mistake...
| noja wrote:
| Does anyone remember the shortcut that brings up a list of
| currently available keyboard shortcuts for the current app? It
| may not be built-in, in which case it was a free utility.
| leecoursey wrote:
| Cheatsheet? I've used it for years. Just hold down Command for
| a few seconds to see a list of all available shortcut keys in
| the current app.
|
| https://www.mediaatelier.com/CheatSheet/feedNotes.php
|
| https://formulae.brew.sh/cask/cheatsheet
| hk1337 wrote:
| plutil. Maybe not that useful to a lot of people but I have been
| going through and collecting bookmarks and Safari bookmarks are
| binary files. plutil is a means of converting the binary property
| file to a json or xml file.
|
| https://keith.github.io/xcode-man-pages/plutil.1.html
| zazaulola wrote:
| It's probably been written about a lot of places already.
|
| For me, increasing the number of icons in the launcher grid was
| very useful.
|
| After running these three commands, the size of the Launcher will
| be set to 13x8 apps: defaults write
| com.apple.dock springboard-columns -int 13 defaults write
| com.apple.dock springboard-rows -int 8 defaults write
| com.apple.dock ResetLaunchPad -bool TRUE; killall Dock
|
| In general, a lot of parameters of different applications can be
| changed via command `defaults`
|
| https://macos-defaults.com/
|
| To get a complete list of parameters, you can execute
| defaults read
| BasilPH wrote:
| I got this trick from someone on the Internet:
|
| $> long_running_command && say "Witness me, for I am done"
| jfb wrote:
| Yep, I do this in a tmux session. But sometimes I'm on a call
| and forget and the ROBOT VOICE says "DATABASE DUMP IS COMPLETE"
| and I jump out of my skin.
| jasomill wrote:
| cliclick[1] is useful for gap-filling the AppleScript
| accessibility APIs when automating poorly-behaved applications.
|
| [1] https://github.com/BlueM/cliclick
| daneel_w wrote:
| A couple more: afconvert(1) - an audio file
| format converter, which includes Apple's superior AAC codec from
| the Core Audio framework diskutil(8) - tons of tools
| for fixed and removable storage
|
| Examples: afconvert in.wav -o out.m4a -q 127 -s
| 2 -b 160000 -f m4af -d 'aac ' mb=300; diskutil
| eraseVolume APFS myramdisk `hdiutil attach -nomount
| ram://$((mb*2048))`
| jghn wrote:
| > afconvert
|
| Oh wow! A while back I ripped some concert audio from Youtube,
| but it was too large for me to sync using my `iTunes Match`.
| I've been too lazy to figure out how to downsample it juuuuust
| enough. But it looks like this works right out of the box
| hk1337 wrote:
| How does that compare with ffmpeg? The arguments seem about the
| same.
| krackers wrote:
| afcovert uses the superior inbuilt AAC converter. FFmpeg can
| do this as well with the right arguments but you have to dig
| them up and the quality is capped to a lower value than you
| can get with afconvert.
| anthk wrote:
| There's no reason to use AAC when we have both OPUS and
| FLAC.
| daneel_w wrote:
| I have three reasons: when using a good encoder (Core
| Audio, FDK or Nero) it's a quality-wise better lossy
| format than MP3, it's smaller than FLAC which matters for
| storage footprint, and unlike Opus and FLAC it's
| supported pretty much everywhere. At some point Opus will
| reach the same level of adoption and that's the point
| where I'll make the switch from AAC, because Opus is
| evidently a better lossy encoder per same bitrate.
| daneel_w wrote:
| ffmpeg offers a few different encoders for many of its
| supported audio/video formats, and the result depends on what
| encoder you tell ffmpeg to use. It does not have support for
| using Core Audio on macOS but it does offer FDK AAC, which is
| one of the better AAC encoders available today - though not
| nearly as good as the one available in Core Audio.
| seec wrote:
| Do you have any sources/informations on an objective
| comparison of encoders quality ?
|
| Way back then (iPod era), I made an expose for a science
| exam (small paper), proving that AAC was indeed better than
| MP3 both subjectively and objectively at most bitrates.
| This is how I got introduced to Fourier transforms and the
| likes; it was very interesting to see that you can
| literally "see" the difference in quality on the encoded
| waveform output.
|
| But I just used the default encoders on the Mac and I
| didn't think about going in deep into encoder comparisons
| at the time. Does it matter that much? From what I know, it
| just about properly programming a math spec, with some
| tricks but I wonder if that makes that much of a
| difference.
|
| In any case, above 256kbps it takes a very skilled listener
| to correctly identify encoded music. Apple has some useful
| tools for that, particularly AU Lab that allows you A/B
| testing of tracks with on-the-fly encoding.
| https://www.apple.com/apple-music/apple-digital-masters/
| anthk wrote:
| Today OPUS is on par of AAC if not better. We aren't at
| the MP3/OGG times.
| daneel_w wrote:
| Opus is better at same bitrate - not by much, but all the
| same it has the upper hand.
| daneel_w wrote:
| One source would be the Hydrogen Audio forums where there
| are regular scientific comparisons - PSNR etc. instead of
| blind listening tests - between various encoders and
| formats. Apple's AAC encoder consistently comes out well
| above anything MP3, best of all the AAC encoders, and up
| at the absolute top together with Opus which produces a
| bit better results per same bitrate.
|
| _> Does it matter that much? From what I know, it just
| about properly programming a math spec, with some tricks
| but I wonder if that makes that much of a difference._
|
| It does matter a lot and the difference can be
| staggering. Producing the audio bitstream is a case of
| both effectively analyzing the original input and
| programmatically expressing the waveform as correctly and
| as efficiently possible. Two excellent examples: the old
| MP3 encoder Xing, which compared to LAME produces very
| poor material even at higher bitrates, and one of the
| earliest open-source AAC encoders, FAAC, which also
| renders a very poor product. A lot of "early adopters"
| got bitten by FAAC and many of them still stubbornly
| cling to the misunderstanding that AAC is a worse format
| than MP3.
| zelphirkalt wrote:
| "superior" ... It looks silly to include such a judging
| adjective in the description of a comman line utility. I don't
| need "subtle" Apple ads on the command line. And aac is about
| the last format I would choose, encoding my audio in.
| derefr wrote:
| To be very clear, the man page is claiming that Apple's
| _implementation_ of the AAC codec [the encoder specifically]
| is superior to other _implementations_ of AAC encoding; not
| that AAC is superior to other audio codecs.
|
| If you're wondering how one implementation of an audio codec
| could be superior to others -- mostly, it's because any
| _lossy_ audio codec has an encoding phase called
| "psychoacoustic compression", where each implementation of
| the codec is free to do whatever it likes to "simplify" the
| waveform in some way (most easily pictured: by taking a
| Discrete Cosine Transform of the waveform, and then
| quantizing / convoluting some parts of the frequency space.
| Like what JPEG does to discard information from the chroma
| channels.)
|
| IIRC, rather than blunt-force quantization, Apple's AAC
| encoding does clever things (akin to the instrument
| separation done to audio in Melodyne) to split the waveform
| into "features", and then discards information in such a way
| that the features' _separability_ is maintained (i.e. it
| doesn 't become harder to "pick out" any given "sound" from
| the audio.)
| daneel_w wrote:
| Its quality is technically superior as evident from the
| product's PSNR and other factors. There are no "ads" here,
| I'm not a brand warrior, and nobody cares what formats are
| the last ones you'd encode your audio in.
| kps wrote:
| I think those are the commenter's descriptions, not Apple's
| man page synopses. My system has afconvert
| -- Audio File Convert diskutil -- Modify, verify and
| repair local disks.
| derefr wrote:
| Mostly I use XLD (https://tmkk.undo.jp/xld/index_e.html) for
| audio conversion (as I'm mostly converting from .BIN + .CUE to
| "iTunes Plus" AAC for uploading to iTunes Match); but my
| understanding is that under the covers it's mostly just using
| afconvert (or whatever the system-framework equivalent of it
| is.)
|
| So if your needs are just "one audio file in, one audio file
| out, and let me tell you exactly what it should look like",
| then afconvert is probably what you want.
| seec wrote:
| XLD is great. The best thing about it is the heavy
| parallelization if you have many cores to throw at the
| problem. You can convert mountains of albums very fast.
|
| Love those type of OG Mac indie software.
| daneel_w wrote:
| Yes, iTunes also uses the same Core Audio framework. In fact,
| even iTunes on Windows uses the same code base through the
| Quicktime-for-Windows libraries it runs off of.
|
| I prefer to encode with afconvert on the command line because
| it gives me a few more options for tweaking things, that I
| don't have access to in iTunes (or "Music" as it's called
| these days). Additionally, I use a simple shell script that
| handles all of it when for example ripping a whole CD.
| cglong wrote:
| One-liner for previewing a file with Quick Look. I aliased this
| to `ql` :) qlmanage -p $argv >/dev/null 2>&1
| hk1337 wrote:
| I'm curious if there's a way to do this with standard input
| instead of having to supply a filename?
|
| I do this with man pages but it opens up in a full Preview
| window, not QuickLook.
| RandallBrown wrote:
| A fun easter egg in the "say" command is that "OS X" is said as
| "Oh Ess Ten".
|
| You can also change voices with -v. My favorite is "cellos" since
| it sings to you.
| robertoandred wrote:
| Not sure that's an easter egg? That's been the pronunciation
| for 25 years.
| mholm wrote:
| It's at least manually programmed in. Otherwise it would have
| said 'Ecks'
| staplung wrote:
| It actually understands roman numerals, to a certain extent.
| E.g. `say LVIII` will say "58". However, `say MCMLXXIX` speaks
| some gibberish that ends in the word "six", for some reason.
|
| It also knows how to say numbers up into the trillions but not
| more than that (although I feel like it used to).
| ramses0 wrote:
| Other cute `say` tricks: muck around with OSX Default Speech
| Voice (to a siri-ish voice) and you can invoke that from the
| CLI.
|
| I hacked together a little script for demo recording like:
| START_FROM="$1" STARTED=0 function transcript()
| { ID="$1" TO_SAY="$2" if [[
| ...STARTED || START_FROM && ID... ]]; then
| STARTED=1 say "$TO_SAY" fi }
| transcript "STEP001" "This is a test" transcript
| "STEP001b" "of the emergency broadcast system"
| transcript "STEP002" "This is only a test, if this was ..."
| transcript "STEP003" "...etc..."
|
| ...and then I have a hardcoded `--output` which will then
| change the invocation to `say -o "$ID.wav" "$TO_SAY"` and
| output audio files.
|
| That way I can iterate on voiceover scripts, eg: `./demo-script
| "STEP002"` => `./demo-script --output`
|
| It's really helpful for iterating on pronunciations, eg:
| `transcript "STEP005" "In case of Four Hundred and Four
| errors..."`, I can just "skip to" and iterate against that line
| (and subsequent ones), or "skip back" and hear it in more of a
| flowing context.
|
| ...even if I don't end up using the `say`-generated audio,
| having a transcript (and even pacing) that I can just read
| through with my own voice is super helpful.
| beeandapenguin wrote:
| Looks like the site's down.
|
| https://archive.is/kGmn6
| yen223 wrote:
| Thanks for the heads up! It should be back up now
| terminaltrove wrote:
| Although not built in, we have a list of easy to install command-
| line utilities for macOS.
|
| https://terminaltrove.com/categories/macos/
|
| You might find one you've never heard of that is useful! :)
| dhruvkb wrote:
| I found a tool of mine submitted by someone else on the site
| (pleasant surprise!) and I want to update the description and
| add a more recent/better image. How would I do that?
| terminaltrove wrote:
| Send us a message, we will update it very quickly!
|
| https://terminaltrove.com/about/
| sureIy wrote:
| Kinda related: does anyone else regularly finds CLI tools,
| installs them and never ever even call them once?
| blacksmith_tb wrote:
| Ha, when I search through my history I usually find I ran
| them exactly once, right after installing, and then forgot
| all about them. But there are some exceptions, I often use
| httpie instead of curl, MTR is great, I am liking doggo
| instead of dig...
| downrightmike wrote:
| That's the difference between recall memory and recognition
| memory. The GUI took off because we can recognize a menu and
| easily figure out where we need to go, versus having to
| memorize obscure and cryptic commands. Honestly having a LLM
| spit out command line arguments is probably the best way
| forward if things don't have a GUI.
| irskep wrote:
| This looks like a list of cross-platform command line tools.
| What about it is Mac-specific?
| JohnMakin wrote:
| pbcopy is my favorite. Almost enough to prefer a mac over my
| usual linux stations, but you can get that on linux easy enough.
| WorldPeas wrote:
| shameless plug for my mac lsblk port
| https://github.com/JakeTrock/gosblk
| noname120 wrote:
| https://ss64.com/mac/
| BossingAround wrote:
| I'm sure everyone knows this, but `open` has an equivalent on
| Linux: `xdg-open`.
| Affric wrote:
| Except xdg mime types are easily heist-able by programs and
| there is no universal truth for it.
|
| Install vscode on Linux and have fun with it hijacking opening
| directories. Which is easy enough to fix (with a bit of know
| how) or work around but annoying.
|
| MacOS is far from perfect but open always doing what I expect
| is a good example of what Apple did well.
| runjake wrote:
| More: nc(1) - netcat, arbitrary TCP and UDP
| connections and listens networkQuality - Speed test +
| network stress tool. system_profiler(8) - Useful way
| to grab extensive system information in shell scripts.
| wdutil(8) - wdutil provides functionality of the Wireless
| Diagnostics application in command line form.
| cwales95 wrote:
| I actual wrote a similar post a while back:
| https://www.chriswales.uk/blog/my-favourite-macos-terminal-c...
|
| networksetup was one of my favourites as well as du and
| caffeinate.
|
| The 'security' command is new to me so thanks!
___________________________________________________________________
(page generated 2024-11-06 23:00 UTC)