как передать вывод находки по каналу в других, находят

Эксперты используют CLIs. Не графический интерфейсы пользователя. Это даже верно для опытных администраторов Windows.

Нет, графический интерфейсы пользователя все еще улучшаются, но самозаписанные сценарии являются путем быстрее и делают то, что Вы хотите.

Улучшить производительность в KVM? Выбросьте его.

Это - просто подсказка от XEN-PV-expert. Только LXC (или другие контейнеры) или находящиеся в chroot решения быстрее.

2
20.03.2017, 12:18
3 ответа

Этот сценарий работает на меня:

#!/bin/bash
#
while IFS= read -r line; do
  find "$line" -printf '%T@ %p\n'
done | sort -k 1nr | sed 's/^[^ ]* //' | head -n 10

можно передать Ваш по каналу find через него:

(0)asus-romano:~/tmp% find . -type f | ./script11.sh
./script11.sh
./script10.sh
[...]

В zshВы могли, использовал глобальный псевдоним, который намного быстрее, но я думаю это bashне имеет их:

(0)asus-romano:~/tmp% alias -g showlast10="-printf '%T@ %p\n' | sort -k 1nr | sed 's/^[^ ]* //' | head -n 10"
(0)asus-romano:~/tmp% find . -type f showlast10
./script11.sh
./script10.sh
./Just  tab.xyz
[...]
1
27.01.2020, 22:00

В zsh, showLatest 10 (om[1,10]) в конце шаблона. Это спецификаторы шарика; om виды ко времени изменения (самый молодой первый) и [1,10] выбирает первые 10 соответствий.

find src -type f -iname \*.py print -lr src/**/(#i)*.py(D.) (необходимо работать setopt extended_glob во-первых, вставленный, что Ваш ~/.zshrc).

Флаг globbing . фильтры регулярные файлы только, D включает скрытые файлы и файлы в скрытых каталогах как find версия была бы. (#i) флаг globbing, который делает остаток от шаблона нечувствительным к регистру.

print -lr печатает его аргументы, один на строку (сделайте это print -lr -- если первый аргумент может начаться с тире). Объединение этих двух, для получения новых файлов:

print -lr src/**/(#i)*.py(D.om[1,10])

к которому на практике можно сократиться print -lr src/**/*.py(om[1,10]).

В zsh Вам, вероятно, не будет нужно это, потому что можно отсортировать список файлов, когда Вы получаете его, по крайней мере, если они все происходят из единственного шаблона. Вот способ реализовать showLatest в zsh, который работает с произвольным списком файлов. К сожалению, om спецификатор шарика может только быть применен к единственному шаблону, и единственный шаблон может только соответствовать файлам в единственном каталоге или дереве. Прием для обхода этого должен использовать e (или +) спецификатор шарика для введения произвольного списка в результат соответствия. Затем подайте заявку o спецификатор шарика для выполнения сортировки; встроенные спецификаторы не действуют на результат e/+ перепишите, но пользовательские (oe или o+) сделайте (с zsh 5.0.5).

#!/usr/bin/env zsh
zmodload zsh/stat
files=("${(@f)$(<&0)}")
print -lr .(e\''reply=($files)'\'noe\''stat -A REPLY +mtime -- $REPLY'\')
2
27.01.2020, 22:00
  • 1
    Ваш showLatest сценарий не будет работать, если все файлы не будут в текущем каталоге. ((foo|bar)(om[1,1]) допустимый шарик, (/etc/passwd|/bin/ls)(om[1,1]) или даже (./foo|./bar)(om[1,1]) не. –  Stéphane Chazelas 21.10.2015, 11:52
  • 2
    @StéphaneChazelas. Есть ли что-либо более простое, чем .(e\''reply=($files)'\'om) отсортировать произвольный массив файлов через спецификатор шарика? –  Gilles 'SO- stop being evil' 21.10.2015, 15:34
  • 3
    Возможно, был хороший прием, но .(e\''reply=($files)'\'om) не работает на меня. Я не могу думать о простом способе сделать это. уверенный –  Stéphane Chazelas 21.10.2015, 18:42
  • 4
    @StéphaneChazelas, которым Мое плохое, применяя почти любой спецификатор шарика кажется просто виду наоборот, вероятно, побочный эффект того, как сортировка реализована. Но oe действительно сортирует на выводе e, по крайней мере, с zsh 5.0.5. Раздражающий, но выполнимый. –  Gilles 'SO- stop being evil' 21.10.2015, 20:30

Сначала, конечно, возможно записать сценарий как showLatest, вероятно, даже использование find в нем. Но затем каждый файл нужно было бы посмотреть в два раза.

Таким образом, хотя это не отвечает на вопрос, который задают в конце, он должен решить проблему, описанную сначала. А именно, как подать гибкий список параметров для нахождения.

sfind.sh:

#!/bin/bash
find "${@:1:$[$#-1]}" -printf '%T@ %p\n' | sort -k 1nr | sed 's/^[^ ]* //' | head -n ${@:$#:1}

Общий вызов sfind.sh [find-parameters] count. Для данного примера это было бы sfind.sh src -type f -iname \*.py 10

Объяснение:

  • $@ содержит список параметров, переданный сценарию
  • $# длина $
  • ${@:1:$[$#-1]} все параметры кроме последнего
  • ${@:$#:1} последний параметр
1
27.01.2020, 22:00

Теги

Похожие вопросы