Посмотрите этот вопрос.
Когда Вы работаете ps ax | grep string
:
[steve@sage-arch ~]$ ps ax | grep 'openbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
5100 pts/0 S+ 0:00 grep openbox
последняя строка, содержащая grep
немного раздражающие somethings
Можно избавить себя от этого путем выполнения ps ax | grep '[s]tring'
:
[steve@sage-arch ~]$ ps ax | grep '[o]penbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
обновление: или просто выполненный pgrep string
Опция 'текущего каталога' для find
-maxdepth 1
. Целая командная строка для Ваших потребностей:
find . -maxdepth 1 -type f -size +20M -print0 | xargs -0 ls -Shal | head
или
find . -maxdepth 1 -type f -size +20M -print0 | xargs -0 ls -halt | head
Примечание: Это будет работать на находку GNU, но не любую находку.
find . -maxdepth 1 -size +20M -printf "%T@ %f\n" |
sort -nr | head -n 20 | sed 's/[^ ]\+ //'
Запуск как @Rajish, но использование printf
команда от find
указывать выходной формат. Существует 3 связанных со временем формата, atime, ctime и mtime - %T
для mtime, %A
и %C
для других форматов.
@
должен указать timeformat в секундах с эпохи. %f
для имени файла, \n
для новой строки между 2 файлами.
Затем сортировка по числу в обратном порядке дает самые молодые файлы сначала, и мы проводим 20 строк ¹ с head
.
В конце, sed
используется, для выбрасывания информации времени.
¹) с тех пор head
работы линию за линией, единственный файл больше чем с 20 новыми строками на имя, которое немного необычно, но не запрещенное, могут повредить вывод, если это, принадлежат первые 20 соответствий. Если у Вас, оказывается, есть такие файлы, попытайтесь избавиться от них - хорошо, изменить их имя. Они часто будут проблемой для простых сценариев.
file
-ls
команда, специальные символы будут распечатаны как оставленные из обратной косой черты символы: find . -maxdepth 1 -size +20M -printf "%T@ " -ls | sort -nr | head -n 20 | sed 's/[^ ]\+ //'
. Дополнительно формат будет похож ls -l
, EoghanM также указан -l
так или иначе.
– manatwork
13.09.2011, 18:39
Спецификаторы шарика Zsh делают это легким. .
спецификатор выбирает только регулярные файлы, Lm+20
выбирает файлы, которые составляют по крайней мере 20 МБ плюс один байт длиной один байт длиной; для включения файлов, которые точно 20 МБ длиной использовать L+20971519
. Затем om
виды путем уменьшения времени изменения, и [1,10]
ограничивает расширение на первые 10 соответствий. Вам все еще нужно -t
опция к ls
если Вы хотите перечислить файлы по дате; или можно передать файлы некоторой другой команде (самый молодой первый). Для передачи файлов другой команде с самым старым файлом сначала использовать Om
к виду путем увеличения времени изменения и [-10,-1]
извлечь последние 10 соответствий.
ls -ltr -- *(.Lm+20om[1,10])
echo *(.Lm+20Om[-10,-1])
Это распечатает только указанные 10 файлов, независимо от любых встроенных символов новой строки в именах файлов. Это использует файловую систему inodes
cd "$1"
for i in $(find . -maxdepth 1 -type f -size +20M -printf "%T@\t%i\n" \
| sort -nr | head | cut -f 2)
do
ls -l "$(find . -inum $i)"
done
Спасибо за все ответы. То, для чего я пошел, следующее:
ls -halt | grep "M " |head
Хотя это воздерживается от 20 мегабайтов в пользу чего-либо более чем мегабайт (и менее чем гигабайт), это легко помнить и сохраняет человекочитаемый элемент размеров файла.
ls
, это показывает Вам представление файлов, ничто больше. Для простых имен файлов вывод главным образом, оказывается, эквивалентен имени файла, но Вы не должны полагаться на него.
– Chris Down
15.09.2011, 12:38
Я думаю, что это может быть лучший способ решить проблему ...
find . -maxdepth 1 -type f -size +20M -exec ls -Shal {} \+ | head
Чтобы избавиться от любых ошибок, пока find пытается получить доступ к файлам, чтение которых у вас нет может захотеть добавить
find . -maxdepth 1 -type f -size +20M -exec ls -Shal {} \+ 2> /dev/null | head