2016-10-26 6 views
0

У меня есть папка Cabo_Verde, и внутри этой папки у меня есть несколько папок (001 300) с несколькими файлами каждый, как это:запустить скрипт в нескольких папках в Баш

Имя файла: Cabo_verde

 001 
    2008.001.00.00.CVBR1.LHZ.SAC 
    2008.001.00.00.CVBR2.LHZ.SAC 
    ... 

    002 
    2008.002.00.00.CVBR1.LHZ.SAC 
    2008.002.00.00.CVBR2.LHZ.SAC 
    ... 

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

for dir in `ls $Cabo_verde`; 
do 
    for subdir in `ls $Cabo_Verde/$dir`; 
    do 
     $(for file in *SAC; do 
sac <<EOF 
echo on 
read $file 
chnhdr KCMPNM LHZ 
write over 
quit 
EOF 
done) 
done; 
done 

в конце концов я получил

ls:cannot access /001: No such file or directory 
ls:cannot access /002: No such file or directory 

Может ли кто-нибудь помочь мне, пожалуйста?

Благодаря

+0

Вы показываете, что вы сделали, а не то, что у вас есть. Укажите результат и описание проблемы. – FDavidov

+0

'$ Cabo_Verde' не' $ Cabo_verde' –

ответ

0

в качестве вспомогательного средства надежности, я предлагаю писать и работает все ваши скрипты с set -u, ваше имя параметра опечатка будет сразу видно.

Вы говорите, что хотите запустить скрипт в каждом каталоге, но действительно ли это так? в любом случае ...

вы можете либо гнездо две петли, как это:

for d in Cabo_Verde/*/; do 
    cd $d 
    for f in *.SAC; do 
    sac ... $f 
    done 
done 

или вы можете сделать это с помощью одного цикла, как это:

for f in Cabo_Verde/*/*.SAC; do 
    cd ${f%/*} 
    sac ... $f 
done 

конечно, вы не нужны петли на всех:

find Cabo_Verde -name \*.SAC -execdir tool 

где tool является сценарий, содержащий sac ... < $1

Смежные вопросы