En este paso, agregará el código para recuperar la información de archivos y directorios del directorio especificado y formatear la salida de la misma manera que el comando ls -lh
. Siga los pasos siguientes para completar este paso:
- Utilice el comando
ls
para recuperar la información detallada sobre los archivos y directorios en el directorio especificado, y almacene la salida en la variable ls_output
:
## Utiliza el comando ls para recuperar información detallada sobre archivos y directorios, luego procesa la salida línea por línea
ls_output=$(ls -l --time-style="+%b %d %Y %H:%M" "$1" | tail -n +2)
- Agregue un bucle
while
para procesar cada línea de ls_output
y extraer la información necesaria:
## Procesa cada línea de la salida de ls
## Elimina los espacios en blanco al final de cada línea
## Analiza cada campo de la línea
- Agregue código para formatear el tamaño del archivo para una mejor legibilidad:
## Formatea el tamaño del archivo para una mejor legibilidad
if [[ $size =~ ^[0-9]+$ ]]; then
## Si el tamaño es un número, formátelo
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
## Si el tamaño no se puede analizar como un número, manténgalo tal como está
size_formatted="$size"
fi
- Agregue código para determinar el formato de fecha adecuado basado en la fecha de modificación del archivo:
current_year=$(date +"%Y")
## Extrae el año, mes y día de la fecha de modificación
file_year=$(echo "$year" | cut -d' ' -f3)
file_month=$(echo "$month" | cut -d' ' -f1)
file_day=$(echo "$day" | cut -d' ' -f1)
## Convierte el cero inicial en el mes al formato decimal
file_month=$(echo "$file_month" | sed 's/^0//')
## Obtiene la marca de tiempo de la última modificación del archivo
file_modified=$(date -d "$month $day $year" +"%s")
## Obtiene la marca de tiempo de hace 6 meses
six_months_ago=$(date -d "6 months ago" +"%s")
## Calcula la diferencia en segundos entre la hora actual y la última modificación del archivo
time_diff=$(($(date +"%s") - file_modified))
if ((file_year == current_year)); then
## Si el año del archivo es el mismo que el año actual
if ((time_diff >= six_months_ago)); then
## Hace más de 6 meses, muestra la fecha completa: Mes Día Año
formatted_date="$month $day $year"
else
## Dentro de los últimos 6 meses, muestra la fecha y la hora: Mes Día HH:MM
formatted_date="$month $day $time"
fi
else
## Si el año del archivo es diferente al año actual, muestra la fecha completa: Mes Día Año
formatted_date="$month $day $year"
fi
- Finalmente, agregue el código para emitir la información de archivos formateada:
## El formato de salida incluye la formateación de fecha personalizada según la condición
El script newls.sh
completo ya está listo. Puede guardar el archivo y pasar al siguiente paso.