Вам не нужно это дополнительное ls -tr
. Это эквивалентно Вашей команде и быстрее:
find . -type f | xargs stat --printf="%y %n\n" | sort -n
Что-то вроде этого исключит подкаталог файлов:
find . -type f ! -path './directory/to/ignore/*' \
| xargs stat --printf="%y %n\n" \
| sort -n
Это все еще проверит каждый файл, если Вы захотите проигнорировать все использование подкаталога -prune
. Необходимо будет переупорядочить вещи немного так, чтобы мы не находили все файлы сначала.
find . -path './directory/to/ignore' -prune -o -type f -print0 \
| xargs -0 stat --printf="%y %n\n" \
| sort -n
И в интересах к тому, чтобы быть максимально эффективным, stat
было избыточно, данная находка уже получает доступ к файлу. Таким образом, Вы на самом деле поражаете файловую систему 2X find ... | stat ...
приблизьтесь, таким образом, вот более эффективный способ, который имеет find
выполнение всей работы.
find . -path './directory/to/ignore' -prune -o -printf '%t %p\n'
| sort -n
Чтобы заставить эту версию работать, я должен был адаптировать printf директивы с тех пор stat
и find
используйте различные для различных метаданных файловой системы.
Когда процесс вызывает vfork
, родительский элемент остается в состоянии D, пока дочерний элемент не выполнил _exit
или execve
(единственные две авторизованные функции, вместе с родственниками execve
, такими как execvp
и т. Д.). Родитель все еще выполняет вызов vfork
, поэтому он находится в состоянии D.
Если дочерний элемент делает что-то подобное (что глупо, но допустимо), родитель останется в состоянии D на неопределенное время, в то время как ребенок будет оставаться в состоянии R бесконечно долго.
if (!vfork()) while (1) {}