Как отфильтровать подмножество файлов по времени? - PullRequest
0 голосов
/ 06 февраля 2019

Давайте предположим, что я проделал большую работу по сокращению списка файлов в каталоге до 10 файлов, которые меня интересуют. Были сотни файлов, и я наконец-то нашел те, которые мне нужны.

Я могу либо передать результаты этого (по конвейеру от ls), либо я могу сказать, что у меня есть массив этих значений (это делается внутри скрипта).В любом случае это не имеет значения.

Теперь из этого списка я хочу найти только те файлы, которые были созданы вчера.

Мы можем использовать такие инструменты, как find -mtime 1, и это хорошо.Но как бы мы сделали это с подмножеством файлов в каталоге?Можем ли мы передать подмножество в find через xargs?

Я могу сделать это довольно легко с помощью цикла for.Но мне было бы любопытно, если бы вы умные люди знали об одной строчке.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Еще один вариант, который не будет повторяться, хотя я бы просто использовал решение Джона find на вашем месте.

$: stat -c "%n %w" "${files[@]}" | sed -n "
     / $(date +'%Y-%m-%d' --date=yesterday) /{ s/ .*//; p; }"

stat напечатает имя и дату создания файлов вмассив.
sed "greps" для нужной даты и удаляет информацию о дате перед печатью имени файла.

0 голосов
/ 06 февраля 2019

Если они находятся в массиве:

files=(...)
find "${files[@]}" -mtime 1

Если они передаются по каналу:

... | xargs -d'\n' -I{} find {} -mtime 1

Обратите внимание, что второй будет запускать отдельную команду findдля каждого файла, который немного неэффективен.

Если какой-либо из элементов является каталогом и вы не хотите искать внутри него, добавьте -maxdepth 0, чтобы отключить рекурсию find.

...