Зацикливание с использованием имен каталогов в bash

#bash #sed

#bash #sed

Вопрос:

примеры файлов:

sample1_day1/

 sample1.str

sample1.yy

sample1_ABC.log
  

sample2_day1/

 sample2.str

sample2.yy

sample2_ABE.log
  

sample3_day1/

 sample3.str

sample3.yy

sample3_ASC.log
  

Я использовал это для перебора файлов:

 for i in `echo *$FILTER | sed 's/'$FILTER'//'`;do
    "something here";
done
  

В данном случае это возвращает «идентификатор», «sampleX»
, но когда я использовал его для перебора папок, это не удалось.

Мне нужно назначить в $i качестве «тега имени» для упрощения именования выходных и входных файлов, необходимых для такой программы, как:

 for i in something; do
    "program --input $i.str --input2 $i.yy --out $i_clean.txt"
done
  

Я хотел, чтобы мой скрипт bash получал имя «sampleX» для папок (например, sample1_day1 и т. Д.) И составлял список sampleX, использовал этот идентификатор для cd (например, cd $i_day1 ) для папки и выполнял некоторые анализы в этой папке, впоследствии называя соответственно выходные и входные данные.

Короче говоря, как мне получить только sample1, sample2 и sample3 и представить их как i?

Спасибо

Ответ №1:

Немного измененная версия ответа @fedterzi. Это помогает только перемещаться внутри sample_day1 или sample_day *, даже если у вас есть каталог с другим именем.

 #!/bin/bash
for i in sample*_day1/ ; do
    cd $i
    "program --input $i.str --input2 $i.yy --out $i_clean.txt"
done
  

Ответ №2:

 for i in */ ; do
    "program --input $i.str --input2 $i.yy --out $i_clean.txt"
done
  

Ответ №3:

Если это просто sample1, sample2, sample3, то это также будет работать-

 for i in {1..3}
do
"program --input sample"$i".str --input2 sample"$i".yy --out sample"$i"_clean.txt"
done
  

Ответ №4:

После чтения и чтения в течение почти нескольких часов я понял, чего не хватает: «/», который обозначает его свойство.

Но, конечно. А затем я также заметил это в ответах @Parthiban и @fedterzi (спасибо, ребята!).