Get only the filename in shellscripts

From your noodle to other noodles. Talk about ways to get the most from Hazel. Even exchange recipes for the cool rules you've thought up. DO NOT POST YOUR QUESTIONS HERE.

Moderators: Mr_Noodle, Moderators

Get only the filename in shellscripts

Postby Endast » Wed Jan 05, 2011 10:14 am

If you write a shell script and you want to know the filename and maybe not necessarily the full path, which hazel always sends in to your script ($1). You can use the command "basename".

So if you use "Run shell script" and typed in the following:
Code: Select all
LONG_FILENAME="$1"

echo "Name with full path: $LONG_FILENAME"
echo "Name with only filename: $(basename $LONG_FILENAME)"


If the rule matched the file /usr/local/bin/foo this would be the output:
Code: Select all
Name with full path: /usr/local/bin/foo
Name with only filename: foo


Hope it helps someone :)

Ps I have only used Hazel for a day, so if there is a better way please tell me :)
Endast
 
Posts: 1
Joined: Fri Dec 31, 2010 10:51 pm

Re: Get only the filename in shellscripts

Postby sjk » Wed Jan 05, 2011 12:31 pm

And dirname is a companion to basename:
Code: Select all
dirname /a/b/c
/a/b
sjk
 
Posts: 331
Joined: Thu Aug 02, 2007 5:43 pm
Location: Eugene

Re: Get only the filename in shellscripts

Postby slappula » Fri Jan 07, 2011 1:08 am

Great post Endast! I was just looking for this info last night and you posted this morning. I wanted to take it one step further and eliminate the file extension. (In my case to remove the .dvdmedia when converting a DVD rip using Handbrake CLI). Here's the Shell Script I used:

LONG_FILENAME="$1"

VARIABLE=$(basename "$LONG_FILENAME" .dvdmedia).m4v

/Applications/CLI/HandBrakeCLI -i "$1" --main-feature -o "$VARIABLE" --preset="AppleTV 2"

***This now works for filenames with spaces. I forgot to put quotes around the filename variables. It works fine now.***

I also found an easier way to do this:

/Applications/CLI/HandBrakeCLI -i "$1" --main-feature -o "${1%dvdmedia}"m4v --preset="AppleTV 2"

Courtesy of another post on this forum:

viewtopic.php?f=4&t=859&hilit=filename
slappula
 
Posts: 3
Joined: Fri Jan 07, 2011 1:04 am

Re: Get only the filename in shellscripts - 10.6

Postby macscript » Fri Feb 18, 2011 1:25 pm

I'm having a strange issue.

When I use the following code:

LONG_FILENAME="$1"

VARIABLE=$(basename "$LONG_FILENAME")

sed '/<?xml version="1.0" encoding="UTF-8"?>/d' "$1" > /path/to/the_folder/"$VARIABLE"

To remove the text string, it works flawlessly on OSX 10.5.8 client, but when I cut and paste it into a rig running 10.6.x SERVER, it fails. (yes, I change the paths)

The error is that "the_folder" is a directory, so it's not seeing "$VARIABLE" as a variable.

Anyone have any thoughts on this? I'm worried that something is wonky when you go to 10.6 or maybe it's server. hmm.
macscript
 
Posts: 5
Joined: Fri Feb 18, 2011 1:17 pm
Location: West Coast, US

Re: Get only the filename in shellscripts

Postby macscript » Fri Feb 18, 2011 3:16 pm

Update:

I notice that my bash versions are different from 10.5 to 10.6

10.5.x = GNU bash, version 3.2.17(1)-release (i386-apple-darwin9.0)

10.6.x = GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)

Could someone verify that the basename variables work the same on their 10.6 rig?
macscript
 
Posts: 5
Joined: Fri Feb 18, 2011 1:17 pm
Location: West Coast, US

Re: Get only the filename in shellscripts

Postby Mr_Noodle » Fri Feb 18, 2011 4:59 pm

Maybe try "/path/to/the_folder/$VARIABLE" instead.
Mr_Noodle
Site Admin
 
Posts: 4118
Joined: Sun Sep 03, 2006 1:30 am
Location: New York City

Re: Get only the filename in shellscripts

Postby macscript » Fri Feb 18, 2011 8:32 pm

Thank you for the quick response, strangely no dice.

I've got some friends looking into it, but it looks like the newer bash might have some twists to it.

If anyone else can help, please chime in.
macscript
 
Posts: 5
Joined: Fri Feb 18, 2011 1:17 pm
Location: West Coast, US

Re: Get only the filename in shellscripts

Postby sjk » Fri Feb 18, 2011 9:16 pm

Try running the script with "bash -x …" (on both systems, for comparison) to display expanded variables, etc. and possibly isolate where the problem is.

And maybe use ${VARIABLE} instead of $VARIABLE though I doubt it'll make any difference for this.
sjk
 
Posts: 331
Joined: Thu Aug 02, 2007 5:43 pm
Location: Eugene

Re: Get only the filename in shellscripts

Postby macscript » Fri Feb 18, 2011 11:55 pm

I got this reply over on an Apple forum and tried it in Hazel and it doesn't seem to work on 10.6. Could this be tested?

<<<<<<<------------>>>>>>>

Not sure how much this helps but the following code works on a 10.6.6. client.

#!/bin/bash

LONG_FILENAME="$1"

VARIABLE=$(basename "$LONG_FILENAME")

echo $VARIABLE

echo "hello hello" > ~/Temporary\ Items/"$VARIABLE"


The version of bash is:
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)

which basename
returns /usr/bin/basename

<<<<<<<------------>>>>>>>

From my testing with a simple echo command, I'm not getting the variable picked up. I can output $1 and all is well, but outputting $VARIABLE (or whatever I choose to call it) doesn't seem to work.

For now, I'm running it in 10.5 and I'll keep testing. Thanks.
macscript
 
Posts: 5
Joined: Fri Feb 18, 2011 1:17 pm
Location: West Coast, US

Re: Get only the filename in shellscripts

Postby macscript » Thu Feb 24, 2011 1:34 pm

Uninstalled Hazel and reinstalled and it works now.

Thank you for the quick responses and info.

Great app.
macscript
 
Posts: 5
Joined: Fri Feb 18, 2011 1:17 pm
Location: West Coast, US

Re: Get only the filename in shellscripts

Postby Mr_Noodle » Fri Mar 04, 2011 4:04 pm

I don't know reinstalling would have fixed it but if it's fixed, I'm not going to argue. :wink:
Mr_Noodle
Site Admin
 
Posts: 4118
Joined: Sun Sep 03, 2006 1:30 am
Location: New York City


Return to Tips & Tricks - DO NOT POST QUESTIONS

Who is online

Users browsing this forum: No registered users and 2 guests



Copyright © 2006-2012 Noodlesoft, LLC, All Rights Reserved. Mac and the Mac logo are trademarks of Apple Computer, Inc., registered in the U.S. and other countries.