Я бы хотел сказать, что я довольно плохо знаком с тем, чтобы по-настоящему глубоко работать с bash и Linux, поэтому любая помощь будет огромной, даже если вы начнете помогать вам.

Проблема в том, что я работаю с кучей каталогов и подкаталогов. Я пытаюсь изобразить строку.

grep 'Relaxed' */*

Это не элегантно, но дает мне список каталогов, которые содержат файл со строкой Relaxed (в моем случае это результат вычисления предсказания электронной структуры). У меня есть около 100+ этих каталогов, поэтому сортировка, какие из них сделаны, а какие нет, утомительна.

Я надеюсь на помощь в том, чтобы найти метод для поиска в каждом из этих каталогов и когда в строке, например:

Расслабленные атомные координаты (дробные):

находится в файле (Relaxed - достаточно строки для распознавания) в этом каталоге с помощью цикла for или чего-то еще, чтобы переместить весь каталог в готовую кучу (другой каталог) и оставить неполные в каталоге как есть. Поэтому у меня будет куча каталогов, которые "сделаны", и нетронутые, которые я могу перезапустить.

Снова любая помощь будет оценена, и я могу уточнить, если что-то кажется запутанным.

Спасибо!

1 ответ1

0
grep -rl 'Relaxed' | xargs dirname | xargs  mv -vt donedirectory

В замедленном режиме:

  • grep -rl 'Relaxed' ищет все файлы и печатает их имена. Если они все находятся в подкаталоге 1-го уровня вашего текущего каталога, использование grep -l 'Relaxed' */* также возможно.
  • xargs dirname вызывает dirname каждого файла этого вывода, чтобы распечатать имя каталога
  • xargs mv -v -t donedirectory перемещает все полученные каталоги в целевой каталог.

Если в одном каталоге можно найти несколько файлов с "Relaxed", вы можете избежать сообщений об ошибках, сделав имена каталогов уникальными:

grep -rl 'Relaxed' | xargs dirname | sort -u | xargs  mv -vt donedirectory

Примечание: команда выше не предполагает никаких неприятностей в именах файлов / каталогов (пробелы и т.д.).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .