Получите и отформатируйте информацию о файлах
В этом шаге вы добавите код для получения информации о файлах и директориях из указанной директории и форматирования вывода в том же формате, что и команда ls -lh
. Следуйте шагам ниже, чтобы завершить этот шаг:
- Используйте команду
ls
, чтобы получить подробную информацию о файлах и директориях в указанной директории, и сохраните вывод в переменную ls_output
:
## Используйте команду ls для получения подробной информации о файлах и директориях, затем обработайте вывод построчно
ls_output=$(ls -l --time-style="+%b %d %Y %H:%M" "$1" | tail -n +2)
- Добавьте цикл
while
, чтобы обработать каждую строку ls_output
и извлечь необходимую информацию:
## Обработайте каждую строку вывода ls
## Удалите конечный пробел из каждой строки
## Разберите каждый столбец строки
- Добавьте код для форматирования размера файла для лучшей читаемости:
## Форматируйте размер файла для лучшей читаемости
if [[ $size =~ ^[0-9]+$ ]]; then
## Если размер - это число, отформатируйте его
if ((size < 1024)); then
size_formatted="${size}B"
elif ((size < 1024 ** 2)); then
size_formatted="$(printf "%.1f" $(echo "scale=2; $size / 1024" | bc))K"
elif ((size < 1024 ** 3)); then
size_formatted="$(printf "%.1f" $(echo "scale=2; $size / (1024**2)" | bc))M"
else
size_formatted="$(printf "%.1f" $(echo "scale=2; $size / (1024**3)" | bc))G"
fi
else
## Если размер не может быть проанализирован как число, оставьте его без изменений
size_formatted="$size"
fi
- Добавьте код для определения подходящего формата даты на основе времени модификации файла:
current_year=$(date +"%Y")
## Извлеките год, месяц и день из даты модификации
file_year=$(echo "$year" | cut -d' ' -f3)
file_month=$(echo "$month" | cut -d' ' -f1)
file_day=$(echo "$day" | cut -d' ' -f1)
## Преобразуйте ведущий ноль в месяце в десятичный формат
file_month=$(echo "$file_month" | sed 's/^0//')
## Получите метку времени последней модификации файла
file_modified=$(date -d "$month $day $year" +"%s")
## Получите метку времени 6 месяцев назад
six_months_ago=$(date -d "6 months ago" +"%s")
## Вычислите разницу в секундах между текущим временем и последней модификацией файла
time_diff=$(($(date +"%s") - file_modified))
if ((file_year == current_year)); then
## Если год файла совпадает с текущим годом
if ((time_diff >= six_months_ago)); then
## Более 6 месяцев назад, выведите полную дату: Месяц День Год
formatted_date="$month $day $year"
else
## В течение последних 6 месяцев, выведите дату и время: Месяц День HH:MM
formatted_date="$month $day $time"
fi
else
## Если год файла отличается от текущего года, выведите полную дату: Месяц День Год
formatted_date="$month $day $year"
fi
- Наконец, добавьте код для вывода отформатированной информации о файлах:
## Формат вывода включает настраиваемую форматирование даты в зависимости от условия
Теперь готов полный скрипт newls.sh
. Вы можете сохранить файл и перейти к следующему шагу.