перебор нескольких расширений файлов в bash

#bash #loops

#bash #циклы

Вопрос:

У меня есть список файлов в папке, и я хочу просто поработать с некоторыми из них. Папка содержит файлы с file.qc, file.qc.gz file.qc.stat file.qc.count и так далее.

Я хочу написать цикл в bash, который откроет только файл.контроль качества и file.qc.gz , игнорируя другие расширения файлов (такие как qc.stats или qc.count)

Комментарии:

1. Я пробовал это, но также я хочу редактировать файлы отдельно, т. Е. .qc и .qc.gz нужны разные состояния awk, для которых он выдает мне ошибку

Ответ №1:

Просто укажите несколько глобусов в вашем цикле:

 #!/bin/bash

# Gracefully cases where there are no matches
shopt -s nullglob

for f in *.qc *.qc.gz
do
  echo "Found: $f"
done
 

Вы также можете записать это короче как *.qc{,.gz} , которое расширяется до того же самого.

Комментарии:

1. Я пробовал это, но также я хочу редактировать файлы отдельно, т. Е. .qc и .qc.gz нужны разные состояния awk, для которых он выдает мне ошибку

2. Это перебирает все нужные вам файлы. Вам решать, делать с ними что-то полезное. Если вы хотите выполнить операцию условно, вы можете использовать if оператор. Например echo "This code runs for all files"; if [[ $f == *.qc.gz ]]; then echo "This code only runs for .qc.gz files"; fi