Скрипт для помещения имен файлов из рабочего каталога в текстовый файл так команды может быть запущен на них

Я хочу сделать сценарий, который помещает имена файлов из рабочего каталога (с определенным расширением) в текстовом файле с некоторыми дополнительными строками:

Например, если я интересуюсь файлами с расширением i и файлы в моем каталоге:

1.b  1.i  2.i  2.z 3.i

Я хочу сделать текстовый файл как:

command_1
command_2 1.i 1.o && command_2 2.i 2.o && command_2 3.i 3.o &
2
задан 4 September 2017 в 10:09

3 ответа

Я нашел лучшее решение.

Пропустите создание текстового файла, и просто сделал сценарий для выполнения нескольких файлов в папке

#!/bin/bash

for file in *.i*
do
  [[ "${file##*.}" =~ fchk ]] && continue
  qchem "$file" "${file%.*}".out 
done

clear
echo "DONE!"
1
ответ дан 2 December 2019 в 03:55

При рассмотрении ответа Вы действительно не хотите создавать текстовый файл, но просто искать файлы и обрабатывать их. Можно использовать find команда для этого, например, для переименования всех файлов, заканчивающихся в .i замена i o сделайте:

find -maxdepth 1 -type f -name "*.i" -exec bash -c 'mv "$0" "${0/i/o}"' "{}" \;

Объяснения

  • -maxdepth 1 останьтесь в текущем каталоге
  • -type f поисковые файлы только
  • -name "*.i" поисковые файлы, заканчивающиеся в .i
  • -exec выполните следующую команду на файле, {} заменен именем файла, должен быть закончен с \;
  • bash -c запустите подоболочку, выполняющую следующие команды путем добавления "{}" мы даем ему имя файла как аргумент 0
  • mv "$0" "${0/i/o}" переименуйте файл путем замены i o – просто пример, конечно, может быть заменен любым (цепочка) управляет, чтобы Вам понравилось
  • \; концы -exec опция

Для команд, которые могут взять больше чем один файл за один раз, можно занять место \; + для объединения в цепочку аргументов посмотрите то, Что является различием между использованием '+' (плюс) и''; (точка с запятой) в - исполнительная команда?.

1
ответ дан 2 December 2019 в 03:55

Альтернатива, если по некоторым причинам Вы хотите использовать файл для хранения списка файлов:

ls *.i  > input.txt
for F in $(cat /path/to/input.txt) ; do
...
done;

или, если у Вас есть пробелы в Ваших именах файлов

while read F  ; do
...
done </path/to/input.txt
0
ответ дан 2 December 2019 в 03:55

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

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