What's this?

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.

Get involved!

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.

UpGuard checks and validates configurations for every major OS, network device, and cloud provider.

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:



May 19, 2015 - A Look At The New Commandlinefu
I've put together a short writeup on what kind of newness you can expect from the next iteration of clfu. Check it out here.
March 2, 2015 - New Management
I'm Jon, I'll be maintaining and improving clfu. Thanks to David for building such a great resource!

Top Tags



Commands using find from sorted by
Terminal - Commands using find - 1,080 results
find / -type d | while read i; do ls $i | wc -l | tr -d \\n; echo " -> $i"; done | sort -n
2017-05-12 00:02:43
User: Zort
Functions: echo find ls read sort tr wc

Show file count into directories.

Usefull when you try to find hugh directories that elevate system CPU (vmstat -> sy)

function cdb() { select dir in $(find -type d -name "$1" -not -path '*/\.*' -prune); do cd "${dir}" && break; done }
find . -type f ! -path "./.git/*" -exec sh -c "head -n 1 {} | egrep -a 'bin/bash|bin/sh' >/dev/null" \; -print -exec shellcheck {} \;
2017-03-16 08:43:56
User: brx75x
Functions: find sh

This is a commodity one-liner that uses ShellCheck to assure some quality on bash and sh scripts under a specific directory. It ignores the files in .git directory.

Just substitute "./.git/*" with "./.svn/*" for older and booring centralized version control.

Just substitute ShellCheck with "rm" if your scripts are crap and you want to get rid of them :)

lc() { od="$1"; nd="$2"; of=$3; nf=$4; cp -rl "$od" "$nd"; parallel -0 "ffmpeg -i {1} -loglevel error -q:a 6 {1.}.{2} && { rm {1}; echo {1.}.{2}; }" :::: <(find "$nd" -type f -iname \*$of -print0) ::: "$nf"; }
2017-03-02 17:37:34
User: snipertyler
Functions: cp find

Uses parallel processing

Reiteration of my earlier command



lc Old_Directory New_DIrectory Old_Format New_Format

lc ~/Music ~/Music_ogg mp3 ogg

find -wholename "*/query/*.json"
find . -name "node_modules" -exec rm -rf '{}' \;
find . -name '*.desktop' | sed s/[^/]*\.desktop$// | uniq -c | sort -g
2016-09-16 12:22:38
User: T4b
Functions: find sed sort uniq

In this case searches for where .desktop files are stored. The resulted is a sorted list of the top directories containing such files.

find . -name \*.pyc -delete
dir=/rom; a=$(find $dir -name \*.sh -exec cat '{}' \; | egrep -cv '^[[:space:]]*#'); b=$(find $dir -name \*.sh -exec cat '{}' \; | egrep -c '^[[:space:]]*#'); echo $((a+b)) lines = ${a} sloc [$((a*100/(a+b)))%] + ${b} comments [$((b*100/(a+b)))%]
find . -type f -printf '%T@ %TY-%Tm-%Td %TH:%TM:%.2TS %p\n' | sort -nr | head -n 5 | cut -f2- -d" "
2016-03-23 11:56:39
User: paulera
Functions: cut find head sort

The output format is given by the -printf parameter:

%T@ = modify time in seconds since Jan. 1, 1970, 00:00 GMT, with fractional part. Mandatory, hidden in the end.

%TY-%Tm-%Td %TH:%TM:%.2TS = modify time as YYYY-MM-DD HH:MM:SS. Optional.

%p = file path

Refer to http://linux.die.net/man/1/find for more about -printf formatting.


sort -nr = sort numerically and reverse (higher values - most recent timestamp - first)

head -n 5 = get only 5 first lines (change 5 to whatever you want)

cut -f2- -d" " = trim first field (timestamp, used only for sorting)


Very useful for building scripts for detecting malicious files upload and malware injections.

lc() { od="$1"; nd="$2"; of=$3; nf=$4; cp -rl "$od" "$nd"; find $nd -type f -iname \*$of -print -execdir ffmpeg -i {} -loglevel error -q:a 6 {}.$nf \; -execdir rm {} +; find $nd -type f -iname \*.$of.$nf -execdir rename "s/$of.$nf/$nf/" {} +; }
2015-12-16 20:16:01
User: snipertyler
Functions: cp find rename rm

Music Library Convert


lc Old_Directory New_DIrectory Old_Format New_Format

lc ~/Music ~/Music_ogg mp3 ogg

This will convert all audio files in the old directory to the new directory from the old format to the new format. It will leave the original library alone. The converted library will retain folder structure.

find <mydir> -type f -exec rename 's/<string1>/<string2>/g' {} \;
2015-11-19 17:51:13
User: thrifus
Functions: find rename
Tags: find replace

This version works on OS X (if you have installed `rename`)

find <mydir> -type f -exec sed -i 's/<string1>/<string2>/g' {} \;
find / -name \*.php -exec grep -Hn .1.=.......0.=.......3.=.......2.=.......5.= {} \;
2015-10-28 20:58:53
User: UnklAdM
Functions: find grep

If this matches any files on your web server expect to find allot of malware spread throughout your server folders. Seems to target wordpress sites. Be sure to check your themes/theme-name/header.php files manually for various redirect scripting usually in the line right above the close head tag.

Good luck!

find / -name \*.php -exec grep -Hn preg_replace {} \;|grep /e|grep POST
D="$(date "+%F %T.%N")"; [COMMAND]; find . -newermt "$D"
2015-10-15 21:09:54
User: flatcap
Functions: find

Often you run a command, but afterwards you're not quite sure what it did.

By adding this prefix/suffix around [COMMAND], you can list any files that were modified.


Take a nanosecond timestamp: YYYY-MM-DD HH:MM:SS.NNNNNNNNN

date "+%F %T.%N"


Find any files that have been modified since that timestamp:

find . -newermt "$D"


This command currently only searches below the current directory.

If you want to look elsewhere change the find parameter, e.g.

find /var/log . -newermt "$D"
touch .tardis; the command ; find . -newer .tardis; rm .tardis;
2015-10-15 19:18:54
User: BeniBela
Functions: command find rm touch

This lists all files modified after calling some command using a temporal anchor.

find . -iname '*png' -exec pngcrush -ow -brute {} {}.crush \;
2015-09-22 11:10:16
User: miniker84
Functions: find
Tags: GNU find

Find all pngs in directory structure and pngcrush them, none destructive. You can just remove the "{}.crush" part if you want destructive.

find /proc/*/fd -xtype f -printf "%l\n" | grep -P '^/(?!dev|proc|sys)' | sort | uniq -c | sort -n
2015-08-18 17:58:21
User: flatcap
Functions: find grep sort uniq
Tags: sort uniq find grep

List all open files of all processes.


find /proc/*/fd

Look through the /proc file descriptors


-xtype f

list only symlinks to file


-printf "%l\n"

print the symlink target


grep -P '^/(?!dev|proc|sys)'

ignore files from /dev /proc or /sys


sort | uniq -c | sort -n

count the results


Many processes will create and immediately delete temporary files.

These can the filtered out by adding:

... | grep -v " (deleted)$" | ...
phpcs --no-colors --standard=WordPress-Core -s -- $( find . -name '*.php' ) | ack -o '(?<=\()\w+(\.\w+)+(?=\)$)' | sort | uniq -c | sort -nr
find <path> |xargs grep <pattern>
find /dev/disk/by-id -type l -printf "%l\t%f\n" | cut -b7- | sort
find . -name '._*' -type f -delete
2015-05-16 18:12:50
User: MarcLaf
Functions: find
Tags: mac os x

Searches from present dir forward and removes all Mac generated . (dot) files.

find . -path "*/any_depth/*" -exec grep "needle" {} +
find . -type f -name '*' -exec md5sum '{}' + > hashes.txt