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:
Schematics:
command [options] [paste your variable here] parameter
command [options] [paste entire column of variables here] parameter
...
(hard-code command "c" and parameter "e" according to your wishes: in example shown command = "cp -a" and parameter = "~")
Features:
- Quick exchange only variable part of a long command line
- Make variable part to be an entire column of data (i.e. file list)
- Full control while processing every single item
Hints:
Paste column of data from anywhere. I.e. utilize the Block Select Mode to drag, select and copy columns (In KDE Konsole with Ctrl+Alt pressed, or only Ctrl pressed in GNOME Terminal respectively).
Disadvantages:
You can paste only one single variable in a row. If there are more space separated variables in a row only first one will be processed, but you can arrange your variables in a column instead. To transpose rows to columns or vice versa look at Linux manual pages for 'cut' and 'paste'.
TODO:
- add edit mode to vary command "c" and parameter "e" on the fly
- add one edit mode more to handle every list item different
- add y/n/a (=All) instead of only y(=default)/n to allowed answers
Disclaimer:
The code is not optimized, only the basic idea is presented here. It's up to you to shorten code or extend the functionality.
Do not use JPEG, GIF, or any other 'lossy' image encoding with Encryption
Why remember? Generate!
Up to 48 chars, works on any unix-like system (NB: BSD use md5 instead of md5sum)
Handle any bad named file which contains ",',\n,\b,\t,` etc
Store the file name as null character separated list
find . -print0 >name.lst
and retrieve it using
read -r -d ""
Eg:
find . -print0 >name.lst;
cat name.lst| while IFS="" read -r -d "" file;
do
ls -l "$file";
done
Consider the following simple situation [ reading something using while and read ]
[See script 1 in sample output]
---------------------------------------------------
The variable var is assigned with "nullll" at first. Inside the while loop [piped while] it is assigned with "whillleeee". [Onlly 2 assignments stmts]. Outside the loop the last assigned value for "var" [and no variable] inside the while can't be accessed [Due to pipe, var is executed in a sub shell].
In these type of situation variables can be accessed by modifying as follows.
[See script 2 in sample output]
___________________________
Vary helpful when reading a set of items, say file names, stored on a file [or variable] to an array an use it later.
Is there any other way 2 access variables inside and outside the loop ??
I find it useless but definitely simpler than #9230
Can be used for command line parameters too.
If you have a more complicated way of entering values (validation, GUI, ...), then write a function i.e. EnterValue() that echoes the value and then you can write:
param=${param:-$(EnterValue)}
WIDTHL=10 and WIDTHR=60 are setting the widths of the left and the right column/bar. BAR="12345678" etc. is used to create a 80 char long string of "="s. I didn't know any shorter way.
If you want to pipe results into it, wrap the whole thing in ( ... )
I know that printing bar graphs can be done rather easily by other means. Here, I was looking for a Bash only variant.
If you make a mess (like I did) and you removed all the executable permissions of a directory (or you set executable permissions to everything) this can help.
It supports spaces and other special characters in the file paths, but it will work only in bash, GNU find and GNU egrep.
You can complement it with these two commands:
1. add executable permission to directories:
find . type d -print0 | xargs -0 chmod +x
2. and remove to files:
find . type d -print0 | xargs -0 chmod -x
Or, in the same loop:
while IFS= read -r -u3 -d $'\0' file; do
case $(file "$file" | cut -f 2- -d :) in
:*executable*|*ELF*|*directory*)
chmod +x "$file"
;;
*)
chmod -x "$file"
;;
esac || break
done 3< <(find . -print0)
Ideas stolen from Greg's wiki: http://mywiki.wooledge.org/BashFAQ/020
attempts to delete all local branches. git will fail on any branches not fully merged into local master, so don't worry about losing work. git will return the names of any successfully deleted branches. Find those in the output with grep, then push null repositories to the corresponding names to your target remote.
assumes:
- your local and remote branches are identically named, and there's nothing extra in the remote branch that you still want
- EDIT: you want to keep your local master branch
No command substitution but subshell redirection
This version uses read instead of eval.
You can ask repeatedly for a non-blank password using this function:
function read_password() {
while [ ! -n "$USER_PASSWORD" ]; do
read -s -p"Password: " USER_PASSWORD
if [ ! -n "$USER_PASSWORD" ]; then
echo "ERROR: You must specify a valid password, please try again"
fi
echo
done
}
Also you can set a time out (in seconds) to write the password
read -t 10 -s -p"Password: " USER_PASSWORD_VARIABLE
if [ ! $? -eq 0 ]; then
echo "Time out!"
fi
It willl popup a message for each new entry in /var/log/messages
found on the notify-send howto page on ubuntuforums.org.
Posted here only because it is one of the favourites of mine.
Replaces space in a file with a underline
works best in a shell script run at startup. It will ping localhost once and output to null, after it does that, acpi is called for temperature in fahrenheit and piped through to another loop that feeds notify-send for a tooltip. After waiting five minutes, it will start over.