Как с помощью команды «найти» найти файлы размером более 1 МБ и выполнить выбранную команду для каждого файла?

I ' m пытается написать сценарий, который найдет все файлы размером более 1 МБ и по одному спрашивает пользователя, что делать с каждым файлом: удалить, сжать или пропустить.

Вот что у меня получилось:

find / -type f -size + 1000000c -exec echo "Файл найден:" {} \; -exec echo "(D) elete, (C) ompress, или (S) kip:" \;

Что произойдет дальше, так это то, что пользователь введет либо D, C, либо S, и соответствующая команда будет выполняется в файле, но я понятия не имею, как читать вводимые пользователем данные и реализовывать цикл «if» во время выполнения команды «find».

Я понимаю, что это вопрос для очень новичка, но я не мог найти ответа. Любая помощь приветствуется.

2
задан 22 April 2021 в 12:09

1 ответ

  1. создать сценарий оболочки (не забудьте сделать его исполняемым), которому вы передаете путь к файлу. Затем сценарий оболочки представит пользователю параметры и выполнит соответствующее действие
  2. вызовет сценарий оболочки из вашей команды find
find / -type f -size +1000000c -exec your-shell-script {} \;

Пример сценария оболочки (не исчерпывающее решение)

#!/bin/bash

TargetFile="$1"
shift

if [ -z "$TargetFile" ]; then
    echo "$0 must be invoked with a path to a file" >&2
    exit 1
fi

while true; do
    echo "(D)elete, (C)ompress, or (S)kip: $TargetFile" >&2

    # Obtain a single keypress.
    # You may wish to tune this behaviour e.g. remove the n1 option
    read -rsn1 Action 

    # The case statement accepts the upper or lower case letters
    # Tune to taste
    case "$Action" in
    D|d)
      echo "Deletion Logic"
      ;;
    S|s)
      echo "Skip Logic"
      break
      ;;
    C|c)
      echo "Compression Logic"
      ;;
    *)
      continue
      ;;
   esac
   break
done

exit

Я оставлю более тонкие детали реализации вам :)

2
ответ дан 23 April 2021 в 23:20

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

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