basepath=Desktop/DEM
dir=(ls -1 type -f)
cd $dir
for f in *.tif; do gdalinfo "$f" | grep -o 'NoData Value\=[-0-9]*' || echo "NoData Value=None"; done > test.txt
cat test.txt | sort | uniq > uniquenodata.txt #this is to find unique no data values in a directory
nodatalist=$(cat uniquenodata.txt)
rightnodata=-9999
我已经制作了上面的BASH脚本,以找出目录中不同的无数据值。 我的目标是让单独的文件夹只有一种类型的无数据值,我需要以某种方式创建一个for循环,它将转换唯一无数据值列表($ nodatalist)并检查每个tif没有数据值并将其发送到具有这些无数据值的相应文件夹。我是BASH的新手,不知道如何将值列表转换为可以在for循环中使用的变量。
答案 0 :(得分:0)
您可以使用变量间接,一个变量,其值是另一个变量的名称
for d in "${nodatalist[@]}"; do
echo "${!d}"
done
如本例所示
declare -a a=("b" "c" "d");
b=1
c=2
d=3
for i in "${a[@]}"; do
echo "name: $i, value: ${!i}"
done
输出:
name: b, value: 1
name: c, value: 2
name: d, value: 3
答案 1 :(得分:0)
更有效的方法是立即移动文件。如果目标目录不存在,请创建它。
for f in *.tif; do
i=$(gdalinfo "$f" | grep -o 'NoData Value=[-0-9]*') && d=${i#NoData Value=} || d="None"
mkdir -p "$d"
mv "$f" "$d"/
done
顺便说一下,这些行看起来像语法错误:
dir=(ls -1 type -f)
cd $dir
如果你有一个这个名字的目录,这将有效cd test
。也许你的意思是find -type f
,但这显然不会产生目录(-type f
专门选择不是目录的常规文件。)