Intereting Posts

Как найти последние n новых файлов для каждой из нескольких каталогов

Я пытаюсь найти способы найти последние n новейших файлов для нескольких каталогов.

Проблема в том, что каталоги структурированы, но на самом деле не иерархически размещены, но у них есть конкретные имена. Пример:

./sensor -./motion --./2dMotion ---./saved ----./<name>.csv ---./processed ----./<name>.csv --./3dMotion ---./saved ---./processed -./temp --./saved ---./<name>.csv --./processed 

Проблема для меня заключается в следующем: я могу использовать параметр -regex в команде find, но это может дать мне только самые новые файлы после дальнейших команд для фильтрации в поисковых файлах новейшего файла, но это верно только для последнего файла, независимо от датчика, который используется.

Я пытаюсь создать выход, в котором будут отображаться последние n файлов, основанных на отметке времени.

Как я могу сделать это как можно проще?

Для 10 последних регулярных .csv файлов в любой saved директории в системе GNU:

 find . -type f -regex '.*/saved/[^/]*\.csv' -printf '%T@:%p\0' | sort -rnz | awk -v RS='\0' -F/ '{sub(/[^:]*:/, ""); file = $0; NF--} ++n[$0] <= 10 {print file}' 

(файлы будут перечислены от самого нового до самого старого).

С помощью zsh вы также можете сделать что-то вроде:

 for dir (**/saved(ND/)) { newest=($dir/*.csv(D.om[1,10])) (($#newest)) && printf '%s\n' $newest } 
 find . -type d -exec bash -c 'echo "next dir: ${1}" ; ls -lt "$1" | grep ^- | head -n 5' bash {} \; 

самая новая из всего дерева

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

 find . -type f -printf "%T@ %p\n" | sort -nr | awk 'NR==6 { exit; } {$1=""; print; }' 

Используйте ls -lt |grep '^-' |head -n N просто в цикле.

 for DIR in /path/to/*; do if [ -d "$DIR"]; then ls -lt "$DIR/*.csv" |grep '^-' |head -n N fi done 

Где N – количество новейших файлов, и вы можете указать, как количество файлов отображается в результате для каждого каталога. см. man ls .