[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)