Фильтрация вывода ls для отображения только каталогов / файлов меньше определенного размера - PullRequest
1 голос
/ 28 мая 2020

Я использую ls -lRa для рекурсивно go через мою файловую структуру.

Однако, когда я добираюсь до больших каталогов, на go через них уходит много времени.

Как вы отфильтруете эту команду ls -lRa, чтобы, если каталог, в котором она находится, превышает определенный размер, он просто будет использовать ls -la и не тратить время на рекурсивное прохождение через каталог.

Я хотел бы сохранить формат ls -la.

Некоторый базовый c псевдокод может быть:

for each fileSize
do
if fileSize is greater than x
then ls -lRa on that directory 
else 
ls -la dir on that directory
fi
done

Как мне получить переменную fileSize в этот пример.

Я знаю, что могу использовать -ls -la | awk '{print $5}', но как мне выполнить проверку, чтобы убедиться, что это число меньше / больше, чем по отношению к каталогу, которому принадлежит размер?

1 Ответ

2 голосов
/ 28 мая 2020

Обязательно: Не разбирать ls

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

for dir in ./*/; do
    count="$(find "$dir" -printf '.' | wc -c)"
    if [[ $count -gt $x ]]; then
        ls -lRa "$dir"
    else
        ls -la "$dir"
    fi
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...