commandlinefu.com is the place to record those command-line gems that you return to again and again.
Delete that bloated snippets file you've been using and share your personal repository with the world. 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.
If you have a new feature suggestion or find a bug, please get in touch via http://commandlinefu.uservoice.com/
You can sign-in using OpenID credentials, or register a traditional username and password.
First-time OpenID users will be automatically assigned a username which can be changed after signing in.
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
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:
This makes your commandlinefu.com's favorites appear as most recent commands in your history.
Can use minute - m, hour - h
Eg: sudo bash -c "sleep 2h; pm-hibernate"
will hibernate the system after 2hours.
Sometimes, you don't want to just replace the spaces in the current folder, but through the whole folder tree - such as your whole music collection, perhaps. Or maybe you want to do some other renaming operation throughout a tree - this command's useful for that, too.
To rename stuff through a whole directory tree, you might expect this to work:
for a in `find . -name '* *'`;do mv -i "$a" ${a// /_};done
No such luck. The "for" command will split its parameters on spaces unless the spaces are escaped, so given a file "foo bar", the above would not try to move the file "foo bar" to "foo_bar" but rather the file "foo" to "foo", and the file "bar" to "bar". Instead, find's -execdir and -depth arguments need to be used, to set a variable to the filename, and rename files within the directory before we rename the directory.
It has to be -execdir and won't work with just -exec - that would try to rename "foo bar/baz quux" to "foo_bar/baz_quux" in one step, rather than going into "foo bar/", changing "baz quux" to "baz_quux", then stepping out and changing "foo bar/" into "foo_bar/".
To rename just files, or just directories, you can put "-type f" or "-type d" after the "-depth" param.
You could probably safely replace the "mv" part of the line with a "rename" command, like rename 'y/ /_/' *, but I haven't tried, since that's way less portable.
flip shell history with PG UP/PG DOWN like with arrows. just type ss and PG UP and see all ssh commands, type ls and PG DOWN - see all ls commands. need to uncomment two options in /etc/inputrc:
"\e[5~": history-search-backward
"\e[6~": history-search-forward
hack found: http://broddlit.wordpress.com/2008/04/12/making-the-bash-history-a-better-place/
Allow to launch nc like a daemon, in background until you still stop it.
(like this command: http://www.commandlinefu.com/commands/view/9978 )
For send script or commands from the client to the server, use nc too, like that :
cat script.sh | nc server 1025
echo "service openvpn restart" | nc server 1025
The loop's inside doesn't do anything, but we can add echo -e "\nCommand received\n" .
When a large maven release goes wrong, by deploying just some of the artifacts letting others behind, some projects got wrong SNAPSHOT versions. This command comes to help!
Tip: replace sed's regex by your version numbers
No need to install additional packages
eg:
say hello
For multiword
say how+are+you
Have you ever wondered what the hell was dd command doing? well, there you have it... notice the -USR1 signal :)...
So I use OSX and don't have the shuf command. This is what I could come up with.
This command assumes /usr/share/dict/words does not surpass 137,817,948 lines and line selection is NOT uniformly random.
sleep 1h ; sudo command
or
sudo sleep 1h ; sudo command
won't work, because by the time the delay is up, sudo will want your password again.
This command is a more flexible than my previous submission.
It will work with spaces however suuuuper hacky and ugly.
Source: http://www.unix.com/shell-programming-scripting/146173-find-rename-files-using-find-mv-sed.html
I'll let Slayer handle that. Raining Blood for your pleasure.
find pictures recursively in a specified folder and renames the file name to originalname_containingfoldername.jpg
An easy way to send all directories to a bash script, it makes it recursive
Doesn't work so well if you connect from windows. Linux only sends LF where windows wants CRLF. The alternative command works better with windows, however it uses script and a named pipe.
This function displays the latest comic from xkcd.com. One of the best things about xkcd is the title text when you hover over the comic, so this function also displays that after you close the comic.
To get a random xkcd comic use the following:
xkcdrandom() { wget -qO- http://dynamic.xkcd.com/comic/random | sed -n 's#^<img src="\(http://imgs.[^"]\+\)"\s\+title="\(.\+\?\)"\salt.\+$#eog "\1"\necho '"'\2'#p" | bash; }
These are just a bit shorter than the ones eigthmillion wrote, however his version didn't work as expected on my laptop for some reason (I got the title-tag first), so these build a command which is executed by bash.