Tag Archives: unix

OSX Terminal Does Image Editing. Who Knew?

Wonders never cease.

Thanks to Cory at maclife, just discovered that OSX Terminal has a built in image resizing tool, SIPS.

You can read the official manual entry for SIPS to see the full power. But here’s some simple examples that I was using an image resizing tool for.

(1) resize all JPGs in current folder to fit in a box 800×800

 sips *.jpg -Z 800 

This will automatically find the largest dimension (width or height), resize that to be 800 and adjust the other to keep the same aspect ratio. Noice.

(2) resize all PNGs in current folder to 100 wide (keep aspect ratio)

 sips *.png --resampleWidth 100 

You can guess what the command is to set the height instead of width.

Works really well, and really fast. But beware of a couple of limitations.

  • edits the original file directly. If worried take copies beforehand.
  • doesn’t support changing the filename. If needed you’ll need to do that step separately before/after.

Recursive folder content lists in OSX

Every now and then you’re really grateful OSX is essentially Unix with a smiley face. Since that allows you to easily get under the hood for those “should be simple” tasks.
For this one, I needed to produce a list of files within a collection of folders which, for demonstration purposes, we’ll call media files.

Recursive file list

This is easy:

  1. Open a terminal window
  2. Type cd (there’s a space after ‘cd’)
  3. Drag the folder you want to start from into the terminal window. It should then complete the path automagically.
  4. Press Enter to navigate to the selected folder.
  5. Enter the command ls -RF > list.txt

This will produce a list of all files in the directory, and subdirectories, as list.txt in the starting directory. Feel free to give it a more useful name.

Once more, with filters

So now you’ve got a list of all the files in the folders. But if you want to find a subset based on filename (say, for example, the list of media files identified in the title as being 2009 releases) then use the wonders of unix to ‘pipe’ the file list to GREP to filter it before writing the file:

ls -RF | grep '2009' > 2009.txt

This will produce a list of only those files with ’2009′ somewhere in the title.

Advanced options

Armed with LS and GREP you can pretty much produce any subset of any folder set you require. Enjoy!