Получение несоответствующих записей в 2 файлах [closed]

Самоисполняемый, самомодифицирующийся скрипт? Это не очень хорошая идея.

Лучшим решением было бы создание демона-заглушки с минимальной функциональностью (т. е. отвечающего за установку новых версий подчиненного сценария и его вызов через определенные промежутки времени). Что-то вроде ... (не проверено)

while true; do
  # check if a patch tar file exists and if yes then do patching
  if [ -f "$PATCH" ]; then
      ( cd /usr/local/mydaemon \
      && tar -xzf "$PATCH" \
      && rm -f "$PATCH" ) \
      || exit -1
  fi
  $SCRIPT
  sleep 10
done
0
15.09.2018, 22:20
4 ответа

Хорошо, я немного изучил, и решение, которое я искал, это

comm -23 <(sort File1) <(sort File2)
1
28.01.2020, 02:23

Используйте круглые скобки, чтобы сгруппировать две команды в одну:

( du -h --max-depth=1 /home 2>/dev/null | egrep -v '(!G|.cp)' | awk -F"/" '{print $NF}' ; ls -al /somedir/ | grep -v 'lock' ; ) | sort | uniq

Вывод двух команд в скобках объединяется и отображается как вывод одного единственного процесса (подоболочки ).

PS :Ваша первая команда выводит /homeсреди каталогов...

1
28.01.2020, 02:23

Если вы хотите перечислить все строки/слова в одном файле, которых нет в другом:

grep -v -f {smallfile} {bigfile}
0
28.01.2020, 02:23

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

for userpath in /home/*/; do
    user=$( basename "$userpath" )
    if [ ! -e "/somedir/$user" ]; then
        printf 'User %s is not suspended\n' "$user"
    fi
done

Это будет перебирать все подкаталоги в /homeи проверять базовое имя каждого каталога (имя пользователя )против имен в /somedir. Если в этом другом каталоге нет соответствующего имени, пользователь не приостанавливается.

1
28.01.2020, 02:23

Теги

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