bash - for 循环遍历多个目录及其文件
bash - for loop through multiple directories and their files
我在同一路径下有 5 个目录 my_path/
:
my_path/1951
my_path/1952
my_path/1953
my_path/1954
my_path/1955
每个目录包含不同数量的以 .nc
结尾的 netcdf 文件。
我需要通过在每个目录和文件中循环来执行 CDO
命令。以下命令仅适用于第一个目录和文件 my_path/1951/*.nc
:
for i in my_path/1951/*.nc
do
cdo selyear,1951/1970 "$i" "$i"2
done
命令select从目录中的nc文件开始,从目录的年份开始,到20年后结束。
因此对于第二个目录,它将是:
for i in my_path/1952/*.nc
do
cdo selyear,1952/1971 "$i" "$i"2
done
第三个:
for i in my_path/1953/*.nc
do
cdo selyear,1953/1972 "$i" "$i"2
done
等...
有没有一种方法可以使用唯一的 for 循环或嵌套的 for 循环来完成所有操作,而不是为每个目录重复上面的 for 循环?
请您尝试以下操作:
#!/bin/bash
for i in my_path/*/; do
year=${i%/}; year=${year##*/} # extract year
year2=$(( year + 19 )) # add 19
for j in "$i"*.nc; do
echo cdo "selyear,${year}/${year2}" "$j" "$j"2
done
done
它将命令行输出为干运行。如果看起来不错,请删除 echo
和 运行。
for x in $@
for i in my_path/$x/*.nc
...
您可以通过获取 sh 脚本的参数来执行 On2 for。
yourScript.sh 1951 1952 ...
之后您可以将所有文件夹传递给您的脚本。
yourScript.sh ./*
你可以这样循环:
shopt -s nullglob
for i in my_path/195[1-5]/*.nc
do
...
done
shopt
命令确保循环工作,即使某些目录不包含 nc 文件。
我在同一路径下有 5 个目录 my_path/
:
my_path/1951
my_path/1952
my_path/1953
my_path/1954
my_path/1955
每个目录包含不同数量的以 .nc
结尾的 netcdf 文件。
我需要通过在每个目录和文件中循环来执行 CDO
命令。以下命令仅适用于第一个目录和文件 my_path/1951/*.nc
:
for i in my_path/1951/*.nc
do
cdo selyear,1951/1970 "$i" "$i"2
done
命令select从目录中的nc文件开始,从目录的年份开始,到20年后结束。
因此对于第二个目录,它将是:
for i in my_path/1952/*.nc
do
cdo selyear,1952/1971 "$i" "$i"2
done
第三个:
for i in my_path/1953/*.nc
do
cdo selyear,1953/1972 "$i" "$i"2
done
等...
有没有一种方法可以使用唯一的 for 循环或嵌套的 for 循环来完成所有操作,而不是为每个目录重复上面的 for 循环?
请您尝试以下操作:
#!/bin/bash
for i in my_path/*/; do
year=${i%/}; year=${year##*/} # extract year
year2=$(( year + 19 )) # add 19
for j in "$i"*.nc; do
echo cdo "selyear,${year}/${year2}" "$j" "$j"2
done
done
它将命令行输出为干运行。如果看起来不错,请删除 echo
和 运行。
for x in $@
for i in my_path/$x/*.nc
...
您可以通过获取 sh 脚本的参数来执行 On2 for。
yourScript.sh 1951 1952 ...
之后您可以将所有文件夹传递给您的脚本。
yourScript.sh ./*
你可以这样循环:
shopt -s nullglob
for i in my_path/195[1-5]/*.nc
do
...
done
shopt
命令确保循环工作,即使某些目录不包含 nc 文件。