Commands by thebillywayne (9)

  • Utilizes shell expansion of {} to give the original filename and a new filename as arguments to `cp`. Can easily be extended to make multiple copies. Show Sample Output


    11
    cp foo{,bak}
    thebillywayne · 2014-01-22 14:09:42 14
  • Implementation of `rename` for systems on which I don't have access to it. Show Sample Output


    2
    rename(){ txtToReplace=${1} ; replacementTxt=${2} ; shift 2 ; files=${@} ; for file in $files ; do mv ${file} ${file/${txtToReplace}/${replacementTxt}} ; done ; }
    thebillywayne · 2012-10-03 17:03:29 5
  • Every rm'ed a file you needed? Of course you haven't. But I have. I got sick of it so I created a bash function. Here it is. It'll put trashed files into a $HOME/.Trash/"date" folder according to the date. I have rm aliased to it as well in my bashrc so that I still use the rm command. It'll choke if you attempt to trash a directory if that directory name is already in the Trash. This rarely happens in my case but it's easy enough to add another test and to mv the old dir if necessary. function trash(){ if [ -z "$*" ] ; then echo "Usage: trash filename" else DATE=$( date +%F ) [ -d "${HOME}/.Trash/${DATE}" ] || mkdir -p ${HOME}/.Trash/${DATE} for FILE in $@ ; do mv "${FILE}" "${HOME}/.Trash/${DATE}" echo "${FILE} trashed!" done fi } Show Sample Output


    13
    trash <file>
    thebillywayne · 2009-11-25 16:45:15 15
  • Having to escape forwardslashes when using sed can be a pain. However, it's possible to instead of using / as the separator to use : . I found this by trying to substitute $PWD into my pattern, like so sed "s/~.*/$PWD/" file.txt Of course, $PWD will expand to a character string that begins with a / , which will make sed spit out an error such as "sed: -e expression #1, char 8: unknown option to `s'". So simply changing it to sed "s:~.*:$PWD:" file.txt did the trick. Show Sample Output


    8
    sed "s:/old/direcory/:/new/directory/:" <file>
    thebillywayne · 2009-08-06 00:37:45 6
  • When plumbers use pipes, they sometimes need a T-joint. The Unix equivalent to this is 'tee'. The -a flag tells 'tee' to append to the file, rather than clobbering it. Tested on bash and tcsh. Show Sample Output


    1
    echo "Hello World." | tee -a hello.txt
    thebillywayne · 2009-06-26 00:55:59 9
  • ditto can be used to "thinnify" Mach-O Universal binaries to separate unncessary code from your machine. For example, doubleTwist.app shaved off around 10 MB while Google Earth went from 112 MB to 62 MB after extracting only the i386 code from them.


    0
    ditto --arch i386 doubleTwist.app doubleTwist_i386.app
    thebillywayne · 2009-06-22 23:59:14 12
  • sudo pmset -a hibernatemode 1 sets hiberate on. sudo pmset -a hibernatemode 0 sets hibernate off. from the pmset man page: 0001 (bit 0) enables hibernation; causes OS X to write memory state to hibernation image at sleep time. On wake (without bit 1 set) OS X will resume from the hibernation image. Bit 0 set (without bit 1 set) causes OS X to write memory state and immediately hibernate at sleep time. I often change my MacBook's sleep state. So I created a function for bash to make it a little easier. Usage: hibernate (on | off) "hibernate on" will set your laptop to hibernate if the lid is closed. "hibernate off" will set your laptop to sleep if the lid is closed. ### note : "proper" indentation isn't preserved on the website function hibernate() { case "${1}" in on) sudo pmset -a hibernatemode 1 echo Hibernate mode on. ;; off) sudo pmset -a hibernatemode 0 echo Hiberate mode off. ;; *) echo "I'm sorry Dave, but I can't do that." ;; esac } To make things easier, add the proper line in your /etc/sudoers file so that your user may invoke pmset without a password. Here's how mine looks: bwayne luna = NOPASSWD: /usr/bin/pmset Don't forget that you must edit sudoers with `sudo visudo` from Terminal.app, and not by another text editor. Sorry this is so Mac OS specific. Show Sample Output


    -1
    sudo pmset -a hibernatemode 1
    thebillywayne · 2009-06-20 22:52:10 12
  • tested on cygwin and Fedora 9 . good to remember for those jobs where you cannot set a site-specific connect option in your ~/.ssh/config file.


    3
    rsync -e 'ssh -p PORT' user@host:SRC DEST
    thebillywayne · 2009-06-05 16:52:43 6
  • I find that I create a directory and then cd into that directory quite often. I found this little function on the internets somewhere and thought I'd share it. Just copy-paste it into you ~/.bash_profile and then `source ~/.bash_profile`. Show Sample Output


    4
    function mcd() { [ -n "$1" ] && mkdir -p "$@" && cd "$1"; }
    thebillywayne · 2009-05-20 16:41:48 8

What's this?

commandlinefu.com is the place to record those command-line gems that you return to again and again. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.

Share Your Commands


Check These Out

extract column from csv file
extracts the 5th column using the delimiter ','

a function to find the fastest DNS server
http://public-dns.info gives a list of online dns servers. you need to change the country in url (br in this url) with your country code. this command need some time to ping all IP in list.

Resume an emerge, and keep all object files that are already built
For Gentoo: If you do not use this command, portage will fetch the source again, and rebuild the hole application from the top. This command make portage keep all files that ar allready built

Print the 16 most recent RPM packages installed in newest to oldest order

repeat a command every one second
Short method of "while x=0; do foo ; sleep 1 ; done"

Url Encode

Remove specific entries from iptables
Then you can remove the specific entry: iptables -D INPUT 10 Just make sure these are set: IPTABLES_SAVE_ON_STOP="yes" IPTABLES_SAVE_ON_RESTART="yes" Else your changes won't stick when you restart iptables.

Quick directory bookmarks
Set a bookmark as normal shell variable $ p=/cumbersome/path/to/project To go there $ to p This saves one "$" and is faster to type ;-) The variable is still useful as such: $ vim $p/ will expand the variable (at least in bash) and show a list of files to edit. If setting the bookmarks is too much typing you could add another function $ bm() { eval $1=$(pwd); } then bookmark the current directory with $ bm p

list files recursively by size

exec chmod to subfiles
Using `-exec cmd {} +` causes find to build the command using all matching filenames before execution, rather than once per file.


Stay in the loop…

Follow the Tweets.

Every new command is wrapped in a tweet and posted to Twitter. Following the stream is a great way of staying abreast of the latest commands. For the more discerning, there are Twitter accounts for commands that get a minimum of 3 and 10 votes - that way only the great commands get tweeted.

» http://twitter.com/commandlinefu
» http://twitter.com/commandlinefu3
» http://twitter.com/commandlinefu10

Subscribe to the feeds.

Use your favourite RSS aggregator to stay in touch with the latest commands. There are feeds mirroring the 3 Twitter streams as well as for virtually every other subset (users, tags, functions,…):

Subscribe to the feed for: