I often use find-dired
and find-named-dired
.
But I wanted to get the results sorted by date and by size.
How can I do that?
I often use find-dired
and find-named-dired
.
But I wanted to get the results sorted by date and by size.
How can I do that?
After doing some googling for the Linux find
parameters and looking at the find-dired
function, I came with these two functions that seem to work.
Not sure if this is the optimal way, but at least they have the effect I desired:
(defun find-dired-by-date (dir args)
(interactive (list (read-directory-name "Run find in directory: " nil "" t)
(read-string "Run find (with args): " find-args
'(find-args-history . 1))))
;; Set to this value in order to get a find sorted by date
(setq find-ls-option '("-exec ls -lt {} + | cut -d ' ' -f5-" . "-lt"))
(find-dired dir args)
(setq find-ls-option '("-ls" . "-dilsb")))
(defun find-dired-by-size (dir args)
(interactive (list (read-directory-name "Run find in directory: " nil "" t)
(read-string "Run find (with args): " find-args
'(find-args-history . 1))))
;; Set to this one to get it sorted by size
(setq find-ls-option '("-exec ls -lSr {} + | cut -d ' ' -f5-" . "-lSr"))
(find-dired dir args)
(setq find-ls-option '("-ls" . "-dilsb")))
If you use library find-dired+.el
then you can do the date part using command find-time-dired
:
find-time-dired
is an interactive compiled Lisp function.
(find-time-dired DIR MIN-TIME MAX-TIME &optional DEPTH-LIMITS EXCLUDED-PATHS)
Find files in directory
DIR
newer or older than a timestamp.The output is shown in a Dired buffer.
MIN-TIME
is a format-time string parsable byparse-time-string
, such as"2014-12-25 23:59:00"
. Only files newer than this are shown. IfMIN-TIME
isnil
or a string matching regexp"^\s-*$"
, there is no lower time limit.
MAX-TIME
is also a format-time string parsable byparse-time-string
. Only files older than this time are shown. IfMAX-TIME
isnil
or a string matching regexp"^\s-*$"
, the upper time limit is the current system time.Optional arg
DEPTH-LIMITS
is a list(MIN-DEPTH MAX-DEPTH)
of the minimum and maximum depths. Ifnil
, search directory tree underDIR
.Optional arg
EXCLUDED-PATHS
is a list of strings that match paths to exclude from the search. Ifnil
, search all directories.If args
DEPTH-LIMITS
andEXCLUDED-PATHS
are both non-nil
then the command run is essentially the following:find . -mindepth MIN-DEPTH -maxdepth MAX-DEPTH \( -path EXCLUDE1 -o -path EXCLUDE2 ... \) -prune -o \( -TIME-SWITCH -SINCE-MIN -TIME-SWITCH +SINCE-MAX \) LS-SWITCHES
where:
EXCLUDE1
,EXCLUDE2
... are theEXCLUDED-PATHS
, but shell-quoted.TIME-SWITCH
isfind-diredp-time-prefix
concatenated with"min"
.SINCE-MIN
is the elapsed time since MIN-TIME in minutes.SINCE-MAX
is the elapsed time since MAX-TIME in minutes.LS-SWITCHES
is(car find-ls-option)
.
User option find-diredp-time-prefix
determines whether to use the time of the last modification of a file (its contents) or the time of the last change of a file's status.
@nephewtom shows how to use find-dired
to find by size (and time).