Я хочу сделать сценарий, который помещает имена файлов из рабочего каталога (с определенным расширением) в текстовом файле с некоторыми дополнительными строками:
Например, если я интересуюсь файлами с расширением 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 &
Я нашел лучшее решение.
Пропустите создание текстового файла, и просто сделал сценарий для выполнения нескольких файлов в папке
#!/bin/bash
for file in *.i*
do
[[ "${file##*.}" =~ fchk ]] && continue
qchem "$file" "${file%.*}".out
done
clear
echo "DONE!"
При рассмотрении ответа Вы действительно не хотите создавать текстовый файл, но просто искать файлы и обрабатывать их. Можно использовать 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
запустите подоболочку, выполняющую следующие команды путем добавления "{}"
мы даем ему имя файла как аргумент 0mv "$0" "${0/i/o}"
переименуйте файл путем замены i
o
– просто пример, конечно, может быть заменен любым (цепочка) управляет, чтобы Вам понравилось\;
концы -exec
опцияДля команд, которые могут взять больше чем один файл за один раз, можно занять место \;
+
для объединения в цепочку аргументов посмотрите то, Что является различием между использованием '+' (плюс) и''; (точка с запятой) в - исполнительная команда?.
Альтернатива, если по некоторым причинам Вы хотите использовать файл для хранения списка файлов:
ls *.i > input.txt
for F in $(cat /path/to/input.txt) ; do
...
done;
или, если у Вас есть пробелы в Ваших именах файлов
while read F ; do
...
done </path/to/input.txt