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

Список каталогов, не содержащих файла с префиксом переменной

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

6680_4#22_SMALT

Все числа до _SMALT являются переменными (это уникальный идентификатор), а файл в каталоге будет выглядеть примерно так:

6680_4#22.bam 

в этом случае, опять же, числа перед .bam являются переменными (они будут соответствовать префиксу каталога, т.е. i.d. перед _SMALT). Есть похожие вопросы, но я не так хорошо знаком со сценарием bash. Некоторые пояснения были бы полезны, а также моя проблема кажется сложной из-за того, что имена файлов меняются в своем префиксе. Любая помощь будет принята с благодарностью.

Что-то вроде этого могло бы работать:

for dir in `find ./serverfault -maxdepth 1 -type d`
do
  find_output=$( find ${dir} -type f -name "*#*_SMALT" )
  test -z "${find_output}" && echo $dir
done

Этот цикл for делает следующее:

  1. Получить список каталогов в указанном месте.
  2. Для каждого каталога запустите find команда для поиска нужного имени файла.
  3. Проверьте, есть ли на выходе find команда пуста. Если это так, напечатайте имя каталога.

Чтобы получить обратные результаты, используйте test -n чтобы проверить, есть ли на выходе find команда что-то нашла.

редактировать: Я совершенно неправильно понял вопрос, поэтому переписал свой ответ.