Как я циклично выполнил бы эту команду?

я исключаю stat и perl, которые не являются POSIX, поэтому более вероятно, что они отсутствуют, чем ls и awk.

Я тоже исключаю wc, поскольку в то время как реализация GNU wc оптимизирована, когда используется вариант -c, вы не должны полагаться на то, что он будет присутствовать для портативного сценария. Более того, некоторые нестандартные -c могут возвращать количество символов -c, которое не обязательно совпадает с количеством байт -c в зависимости от локали.

В этом случае решение основано только на стандартных утилитах, которые сообщают размер файла в качестве аргумента:

filesize() {
        [ -f "$1" ] && ls -dnL -- "$1" | awk '{print $5;exit}' || { echo 0; return 1; }
}

Остерегайтесь, однако, что сообщенный размер может быть либо больше, либо меньше фактического размера содержимого файла на диске, в зависимости от используемой файловой системы, поддержки разреженных файлов, а также таких опций, как сжатие или дедупликация.

1
23.12.2014, 14:55
2 ответа

Я бы, наверное, использовал , в то время как И case:

i=0 c=3
while case "$((i+=!(c==1))).$c"   in 
      ([MAX_REPEAT_NUM].*) ! break;;
      (*.3) read c; continue      ;;
      (*.1) printf 'prompt> '
            read d || continue    ;;esac
do    [ -d "$d" ] || continue
      find "$REPLY" -type f \
            -printf '%TY-%Tm-%Td %.8TT %p\n '| 
      sort -r | head -20
done

Таким образом можно проверить возможные ветви.

0
27.01.2020, 23:51
while true; do
    echo "You have chosen to spec....  '/path/../'" 
    read
    if [ -d "$REPLY" ]; then
        find "$REPLY" -type f -printf '%TY-%Tm-%Td %.8TT %p\n '| sort -r | head -20
        break
    else
        echo "could not find $REPLY, ensure the path is correct and try again"
        echo "press enter to continue..."
        read cont
    fi
done
1
27.01.2020, 23:51

Теги

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