Скрипт или команда для вывода списка всех верхних- каталоги уровня, которые содержат подкаталоги с измененными файлами, которым меньше 30 дней

Я только что обновил iTerm2 до версии Build 3.0 .14 ​​ и столкнулся с этой проблемой. Команда ls из coreutils больше не встречалась на моем пути. После запуска:

brew install coreutils

и открытия новой оболочки проблема была устранена. В моем ~ / .bashrc есть следующий псевдоним:

export LS_OPTS='--color=auto'
alias ls='ls ${LS_OPTS}'
1
06.05.2016, 09:23
3 ответа

Я бы использовал find для каждого каталога по очереди и перенаправлял его на grep -q. , чтобы проверить, есть ли какие-либо результаты, и вывести имя каталога при условии, были ли результаты какие-либо:

for d in */; do find "$d" -type f -mtime -30 | grep -q . && printf %s\\n "$d"; done
1
27.01.2020, 23:35

Это может быть неэффективно:

find -mindepth 3 -maxdepth 3 -type f -mtime -30 | 
    xargs -n 1 dirname | 
    xargs -n 1 dirname | 
    uniq # (or sort -u, I assume find's output is already sorted)
1
27.01.2020, 23:35
find */ -type f -mtime -30 -print0 | 
    sed -z -e  's:/.*$::' | 
    sort -z -u | 
    tr '\000' '\n'

Требует GNU sort и GNU sed для опций -z (ввод с разделителем NUL).

find перечисляет все файлы в подкаталогах текущего каталога возрастом менее 30 дней. Вывод передается в sed для удаления всего после первого /, затем в sort для уникальной сортировки полученных имен каталогов.

0
27.01.2020, 23:35

Теги

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