shell 我如何选择一个文件下的目录在一个循环和打印数据从它?

lf3rwulv  于 2022-11-16  发布在  Shell
关注(0)|答案(2)|浏览(129)

我需要在循环中的文件中找到一个扩展名为.gz的文件,并从中提取一些数据并打印出来。
我有像d091,d092,....,d150这样的文件夹,在这些文件夹下有扩展名为.gz的不同文件。我需要打印这些.gz文件中的一些数据。请按我指定的位置打印文件中的数据。
这是我尝试使用的代码,但它没有工作。我如何指定在for循环的路径?

shopt -s nullglob
shopt -s failglob

for k in {091..099}; do
for file in $(ls *.gz)
    do
       echo ${file:0:4} | tee -a receiver_ids 
       echo ${file:16:17} | tee -a doy 
       echo ${file:0:100} | tee -a data_record 
done
done
kx7yvsdv

kx7yvsdv1#

我不确定您的echo | tee部分是否正确,但对于其余部分,您可以尝试以下操作:

shopt -s nullglob

for dir in d[0-9][0-9][0-9]; do
    printf "processing %s\n" "$dir"
    if [[ -d "$dir" ]]; then
        cd "$dir"                                 # enter the directory
        for file in *.gz; do                      # never use ls to get a files list
            printf "found [%s] file.\n" "$file"
        done
        cd ..                                     # come back to parent dir
    fi
done

如果不需要分隔目录,可以将其缩短为单个循环:

for file in d[0-9][0-9][0-9]/*.gz; do
    fn="${file##*/}"
    dir="${file%%/*}"
    printf "found [%s] file in [%s] dir\n" "$fn" "$dir"
done
mzillmmw

mzillmmw2#

我猜你是被允许用找的吧?

for file in $(find . -name "*.gz"); do 
  file=$(basename ${file})
  echo ${file:0:4} | tee -a receiver_ids
  echo ${file:16:17} | tee -a doy
  echo ${file:0:100} | tee -a data_record 
done

相关问题