Назад | Перейти на главную страницу

справка по сценарию bash с помощью команд find и diff

У меня есть сценарий bash, с которым мне нужна помощь:

#!/bin/bash
if [ -f "/suid.old" ]
then
find / -perm -4000 -o -perm -2000 ls > suid.old
else
find / -perm 4000 -o -perm -2000 ls > suid.new

diff suid.old suid.new > newchanges.list
fi

когда я запускаю его, появляется сообщение об ошибке: diff: suid.old: Нет такого файла или каталога.

Мой сценарий должен сказать, что если suid.old не существует, используйте команду find, чтобы создать его, или используйте команду find, чтобы делать все, что нужно, с suid.new. после обнаружения любых внесенных изменений и перенаправления на newchanges.list

пожалуйста помоги,

Удалите косую черту из имени файла в if заявление. Таким образом, он проверяет наличие файла в корневом каталоге, но позже он создается в любом текущем каталоге.

Кроме того, ваш сценарий в основном говорит: «Если suid.old не существует, тогда сделайте разницу ".

Вам может понадобиться что-то вроде:

#!/bin/bash
if [ ! -f "suid.old" ]
then
    find / -perm -4000 -o -perm -2000 ls > suid.old
fi

if [ ! -f "suid.new" ]
then
    find / -perm 4000 -o -perm -2000 ls > suid.new
fi

diff suid.old suid.new > newchanges.list
mv suid.new suid.old

Здесь говорится: «Если suid.old не существует, создайте его. Если suid.new не существует, создайте его. Теперь, когда они созданы (или уже существуют), выполните сравнение».

Моя версия:

#!/bin/bash

if [ ! -f "/suid.old" ]; then                          # note: !
   find / -perm -4000 -o -perm -2000 -ls > /suid.old   # note: dash before ls; slash before file
else
   find / -perm 4000 -o -perm -2000 -ls > /suid.new
   diff /suid.old /suid.new > /newchanges.list
   mv /suid.new /suid.old                              # could be handy
fi

Удалите "ls" из строк поиска. Они должны выглядеть как find / -perm -4000 -0 -perm -2000 > suid.old

способ настройки find предполагает, что ls - это аргумент пути. Так как find печатает результаты в STDOUT, простое выполнение обычного перенаправления приведет к желаемому результату.