Попытка получить это на мобильном устройстве требует еще нескольких шагов. screen.availWidth
остается неизменным независимо от ориентации устройства.
Вот мое решение для мобильных устройств:
function getOrientation(){
return Math.abs(window.orientation) - 90 == 0 ? "landscape" : "portrait";
};
function getMobileWidth(){
return getOrientation() == "landscape" ? screen.availHeight : screen.availWidth;
};
function getMobileHeight(){
return getOrientation() == "landscape" ? screen.availWidth : screen.availHeight;
};
Это можно сделать и с помощью рекурсивной функции в bash.
Пусть F - функция, которая отображает время файла, которое должно быть лексикографически сортируемым, гггг-мм-дд и т. Д. (Зависит от ОС?)
F(){ stat --format %y "$1";} # Linux
F(){ ls -E "$1"|awk '{print$6" "$7}';} # SunOS: maybe this could be done easier
R рекурсивная функция, которая запускается через каталоги
R(){ local f;for f in "$1"/*;do [ -d "$f" ]&&R $f||F "$f";done;}
И, наконец,
for f in *;do [ -d "$f" ]&&echo `R "$f"|sort|tail -1`" $f";done
Это то, что я использую (очень эффективно):
function find_last () { find "${1:-.}" -type f -printf '%TY-%Tm-%Td %TH:%TM %P\n' 2>/dev/null | sort | tail -n "${2:-10}" }
PROS:
USAGE :
find_last [dir [number]]
где:
dir
- каталог для поиска [текущий каталог] number
- количество отображаемых новейших файлов [10] Выход для find_last /etc 4
выглядит следующим образом:
2019-07-09 12:12 cups/printers.conf
2019-07-09 14:20 salt/minion.d/_schedule.conf
2019-07-09 14:31 network/interfaces
2019-07-09 14:41 environment
Для простого вывода ls
используйте это. Список аргументов отсутствует, поэтому он не может быть слишком длинным:
find . | while read FILE;do ls -d -l "$FILE";done
И дополнен cut
только для даты, времени и имени:
find . | while read FILE;do ls -d -l "$FILE";done | cut --complement -d ' ' -f 1-5
РЕДАКТИРОВАТЬ : только что заметил, что текущий верхний ответ сортируется по дате изменения. Это так же просто для второго примера, поскольку дата модификации указывается первой в каждой строке - добавьте сортировку в конец:
find . | while read FILE;do ls -d -l "$FILE";done | cut --complement -d ' ' -f 1-5 | sort
Вы можете дать команде printf команду find try
% Последнее время доступа к файлу Ak в формате, заданном параметром k, который является либо функцией
@' or a directive for the C
strftime '. Возможные значения для k перечислены ниже; некоторые из них могут быть доступны не во всех системах из-за различий в strftime между системами.
Попробуйте это:
#!/bin/bash
find $1 -type f -exec stat --format '%Y :%y %n' "{}" \; | sort -nr | cut -d: -f2- | head
Запустите его с путем к каталогу, где он должен начать рекурсивное сканирование (он поддерживает имена файлов с пробелами).
Если файлов много, может пройти некоторое время, прежде чем они что-либо вернут. Производительность можно улучшить, если вместо этого использовать xargs
:
#!/bin/bash
find $1 -type f -print0 | xargs -0 stat --format '%Y :%y %n' | sort -nr | cut -d: -f2- | head
, что немного быстрее.
Следующее возвращает вам строку с отметкой времени и именем файла с самой последней отметкой времени:
find $Directory -type f -printf "%TY-%Tm-%Td-%TH-%TM-%TS %p\n" | sed -r 's/([[:digit:]]{2})\.([[:digit:]]{2,})/\1-\2/' | sort --field-separator='-' -nrk1 -nrk2 -nrk3 -nrk4 -nrk5 -nrk6 -nrk7 | head -n 1
Результатом является вывод вида: <yy-mm-dd-hh-mm-ss.nanosec> <filename>
Вот одна версия, которая работает с именами файлов, которые также могут содержать пробелы, символы новой строки, символы глобуса:
find . -type f -printf "%T@ %p\0" | sort -zk1nr
find ... -printf
печатает изменение файла (значение EPOCH), за которым следует пробел и \0
прекращены имена файлов. sort -zk1nr
читает завершенные данные NUL и сортирует их численно в обратном порядке. Поскольку вопрос помечен Linux, я предполагаю, что доступны gnu
утилиты.
Вы можете передать выше с помощью:
xargs -0 printf "%s\n"
, чтобы напечатать время изменения и имена файлов, отсортированные по времени изменения (самое последнее сначала), оканчивающиеся символами новой строки.
Хорошо обрабатывает пробелы в именах файлов - не то, чтобы вы их использовали!
$ find . -type f -not -path '*/\.*' -printf '%TY.%Tm.%Td %THh%TM %Ta %p\n' |sort -nr |head -n 10
2017.01.28 07h00 Sat ./recent
2017.01.21 10h49 Sat ./hgb
2017.01.16 07h44 Mon ./swx
2017.01.10 18h24 Tue ./update-stations
2017.01.09 10h38 Mon ./stations.json
Подробнее find
изобилие можно найти, перейдя по ссылке.
Функция быстрого запуска:
# findLatestModifiedFiles(directory, [max=10, [format="%Td %Tb %TY, %TT"]])
function findLatestModifiedFiles() {
local d="${1:-.}"
local m="${2:-10}"
local f="${3:-%Td %Tb %TY, %TT}"
find "$d" -type f -printf "%T@ :$f %p\n" | sort -nr | cut -d: -f2- | head -n"$m"
}
Найти последний измененный файл в каталоге:
findLatestModifiedFiles "/home/jason/" 1
Вы также можете указать свой собственный формат даты / времени в качестве третьего аргумента.
Я показываю это для последнего времени доступа, вы можете легко изменить это, чтобы сделать последнее время мода.
Есть два способа сделать это:
1) Если вы хотите избежать глобальной сортировки, которая может быть дорогой, если у вас есть десятки миллионов файлов, то вы можете сделать: (позиционируйте себя в корне каталога, в котором вы хотите начать поиск)
linux> touch -d @0 /tmp/a;
linux> find . -type f -exec tcsh -f -c test `stat --printf="%X" {}` -gt `stat --printf="%X" /tmp/a` ; -exec tcsh -f -c touch -a -r {} /tmp/a ; -print
Приведенный выше метод печатает имена файлов с постоянно более новым временем доступа, а последний файл, который он печатает, - это файл с самым последним временем доступа. Очевидно, что вы можете получить последнее время доступа, используя «хвост -1».
2) Вы можете найти рекурсивно распечатать имя, время доступа ко всем файлам в вашем подкаталоге, а затем отсортировать по времени доступа и хвосту самую большую запись:
linux> \find . -type f -exec stat --printf="%X %n\n" {} \; | \sort -n | tail -1
И там у тебя это есть ...
Попробуйте
#!/bin/bash
stat --format %y $(ls -t $(find alfa/ -type f) | head -n 1)
. Он использует find
для сбора всех файлов из каталога, ls
для их сортировки по дате изменения, head
для выбора 1-го файла и, наконец, stat
чтобы показать время в хорошем формате.
В настоящее время это небезопасно для файлов с пробелами или другими специальными символами в их именах. Напишите комментарий, если он еще не соответствует вашим потребностям.
Я сократил удивительный ответ Halo на этот однострочный
stat --printf="%y %n\n" $(ls -tr $(find * -type f))
Обновлен : Если в именах файлов есть пробелы, вы можете использовать эту модификацию
OFS="$IFS";IFS=\n';stat --printf="%y %n\n" $(ls -tr $(find . -type f));IFS="$OFS";
GNU Find (см. man find
) имеет параметр -printf
для отображения файлов времени EPOCh и относительного имени пути.
redhat> find . -type f -printf '%T@ %P\n' | sort -n | awk '{print $2}'
Эта команда работает в Mac OS X:
find "$1" -type f -print0 | xargs -0 stat --format '%Y :%y %n' | sort -nr | cut -d: -f2- | head
В Linux, как просил оригинальный автор, используйте stat
вместо gstat
.
Этот ответ, конечно, является выдающимся решением user37078 , переведенным из комментария в полный ответ. Я смешал в понимание CharlesB , чтобы использовать gstat
в Mac OS X. Я получил coreutils из MacPorts , а не доморощенного , кстати.
И вот как я упаковал это в простую команду ~/bin/ls-recent.sh
для повторного использования:
#!/bin/bash
# ls-recent: list files in a dir tree, most recently modified first
#
# Usage: ls-recent path [-10 | more]
#
# Where "path" is a path to target directory, "-10" is any arg to pass
# to "head" to limit the number of entries, and "more" is a special arg
# in place of "-10" which calls the pager "more" instead of "head".
if [ "more" = "$2" ]; then
H=more; N=''
else
H=head; N=$2
fi
find "$1" -type f -print0 |xargs -0 gstat --format '%Y :%y %n' \
|sort -nr |cut -d: -f2- |$H $N
У меня есть этот псевдоним в моем .profile, который я использую довольно часто
$ alias | grep xlogs
xlogs='sudo find . \( -name "*.log" -o -name "*.trc" \) -mtime -1 | sudo xargs ls -ltr --color | less -R'
Так что он делает то, что вы ищете (за исключением того, что он не изменяет дату / время на нескольких уровнях) - выглядит для последних файлов (в данном случае * .log и * .trc); Кроме того, он находит только файлы, измененные в последний день, затем сортирует по времени и передает данные через меньшее:
sudo find . \( -name "*.log" -o -name "*.trc" \) -mtime -1 | sudo xargs ls -ltr --color | less -R
пс. Обратите внимание, что у меня нет root на некоторых серверах, но всегда есть sudo, поэтому вам может не понадобиться эта часть.
Решения perl и Python в этом посте помогли мне решить эту проблему в Mac OS X: https://unix.stackexchange.com/questions/9247/how-to-list-files-sorted-by -модификация-дата-рекурсивно-но-стат-командной помогло .
Цитата из поста:
Perl:
find . -type f -print |
perl -l -ne '
Решения perl и Python в этом посте помогли мне решить эту проблему в Mac OS X: https://unix.stackexchange.com/questions/9247/how-to-list-files-sorted-by -модификация-дата-рекурсивно-но-стат-командной помогло .
Цитата из поста:
Perl:
[110] Python:
find . -type f -print |
python -c 'import os, sys; times = {}
for f in sys.stdin.readlines(): f = f[0:-1]; times[f] = os.stat(f).st_mtime
for f in sorted(times.iterkeys(), key=lambda f:times[f]): print f'
{ Решения perl и Python в этом посте помогли мне решить эту проблему в Mac OS X: https://unix.stackexchange.com/questions/9247/how-to-list-files-sorted-by -модификация-дата-рекурсивно-но-стат-командной помогло .
Цитата из поста:
Perl:
[110] Python:
find . -type f -print |
python -c 'import os, sys; times = {}
for f in sys.stdin.readlines(): f = f[0:-1]; times[f] = os.stat(f).st_mtime
for f in sorted(times.iterkeys(), key=lambda f:times[f]): print f'
} = -M; # store file age (mtime - now)
END {
$,="\n";
print sort { Решения perl и Python в этом посте помогли мне решить эту проблему в Mac OS X: https://unix.stackexchange.com/questions/9247/how-to-list-files-sorted-by -модификация-дата-рекурсивно-но-стат-командной помогло .
Цитата из поста:
Perl:
[110] Python:
find . -type f -print |
python -c 'import os, sys; times = {}
for f in sys.stdin.readlines(): f = f[0:-1]; times[f] = os.stat(f).st_mtime
for f in sorted(times.iterkeys(), key=lambda f:times[f]): print f'
{$b} <=> Решения perl и Python в этом посте помогли мне решить эту проблему в Mac OS X: https://unix.stackexchange.com/questions/9247/how-to-list-files-sorted-by -модификация-дата-рекурсивно-но-стат-командной помогло .
Цитата из поста:
Perl:
[110] Python:
find . -type f -print |
python -c 'import os, sys; times = {}
for f in sys.stdin.readlines(): f = f[0:-1]; times[f] = os.stat(f).st_mtime
for f in sorted(times.iterkeys(), key=lambda f:times[f]): print f'
{$a}} keys %_; # print by decreasing age
}'
Python:
find . -type f -print |
python -c 'import os, sys; times = {}
for f in sys.stdin.readlines(): f = f[0:-1]; times[f] = os.stat(f).st_mtime
for f in sorted(times.iterkeys(), key=lambda f:times[f]): print f'
Чтобы найти все файлы, состояние файла которых было изменено в последний раз N минут назад:
find -cmin -N
, например:
find -cmin -5