Сценарий, который отображает файлы, больше, чем 1M один за другим, и просит дальнейшие действия от пользователя?

Я должен записать сценарий, который отобразил бы все файлы, больше, чем 1M один за другим (в текущем dir) и после каждого файла, отображенного для выяснения у пользователя, хочет ли он удалить его (Y/n), затем если он хочет сжать его и наконец опция пропустить его. После того, как пользователь выбирает действие, следующий файл должен быть отображен с теми же предлагаемыми опциями.

Именно это мне удалось записать до сих пор, но вывод дает мне название первого файла (Один за другим вещь работы) и дает 'Недопустимый вход' на следующей строке.

#!/bin/bash

find . -maxdepth 1 -type f -size +1M | while read -r output; 
do
    echo ${output};

    read -r -p "Would you like to delete the file? [Y/n] " input

    case $input in
    [yY][eE][sS]|[yY])
        echo "The file has been deleted!"
        ;;
    [nN][oO]|[nN])
        ;;
    *)
        echo "Invalid input..."
        exit 1
        ;;
    esac
done

Это ясно мне это read -r -p input не работает в цикле с условием продолжения, который уже содержит read -r output, но я не вижу то, что я мог сделать в этой ситуации.

0
задан 21 March 2019 в 17:37

2 ответа

Используйте функцию и назовите ее как это find [...] -exec bash -c 'myFunction "$1"' _ {} \;.

, например, что-то вроде этого:

#!/bin/bash

rmziporskip(){
    printf 'What should I do with %s ?\n' "$1"
    select action in remove zip skip; do
        case $action in
            remove)
                    rm "$1";
                    echo "The file has been deleted!"
                    ;;
            zip)
                    zip "$1.zip" "$1"
                    rm "$1";
                    echo "The file has been zipped and the original deleted!"
                    ;;
            *)
                    echo "The file has been skipped!"
                    ;;
        esac
        break;
    done
}


export -f rmziporskip
find . -maxdepth 1 -type f -size +1M -exec bash -c 'rmziporskip "$1"' _ {} \;
1
ответ дан 21 September 2019 в 09:12

Да существует двойное назначение входного чтения станд.
В этом случае, можно просто читать из оконечного устройства управления:

в строке 7, добавьте </dev/tty

read -r -p "Would you like to delete the file? [Y/n] " input</dev/tty
0
ответ дан 21 September 2019 в 09:12

Другие вопросы по тегам:

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