夹在命名空间无法识别

问题描述 投票:0回答:1

我很新的计算器和来砸/ Python脚本。

我需要的是在.TIF格式来调整一些数据地形模型文件(300+)要能“时间转换成.hgt和我能够做到这一切使用@中的工具,但只有每一个文件一次。猜你alredy发现其中的脚本进来:需要使自动化过程的300多个文件!

所以我开始寻找一些关于如何bash的作品,并与该出来了:

#!/bin/bash
for filename in "'/home/fenix/1\ Vari\ HDD/MTB/DTM\ Alos/'"*.tif; do
    PATH=/usr/bin/ gdalwarp -of Gtiff -ts 3601 3601 $filename.tif "'/home/fenix/1\ Vari\ HDD/MTB/DTM Alos/temp/'"$filename.tif
done

我总是用反斜杠移动到“间隔”名称的目录或文件,但似乎没有与脚本工作.... googleing我发现使用引号或双引号将修复它,但仍然没有成功

正如你所看到的在上面的代码中,我用双引号,报价和孤独反斜线和3的组合,但我一直都想与

错误4:“/家庭/菲尼克斯/ 1:没有这样的文件或目录

为什么?!?!

在此先感谢和抱歉,我的英语水平!

编辑:继tripleee金色的建议,我编辑的脚本,如:

#!/bin/bash
PATH=/usr/bin/
for filename in "/home/fenix/1 Vari HDD/MTB/DTM Alos/"*.tif; do
    gdalwarp -of Gtiff -ts 3601 3601 "$filename" "/home/fenix/1 Vari HDD/MTB/DTM Alos/temp/${filename##*/}"
done

和工作就像一个魅力!

bash directory space
1个回答
1
投票

你的过度引用的方式越来越。

#!/bin/bash
for filename in "/home/fenix/1 Vari HDD/MTB/DTM Alos/"*.tif; do
    PATH=/usr/bin/ gdalwarp -of Gtiff -ts 3601 3601 "$filename" "${filename##*/}"
done

字符串/home/fenix/stuff with spaces可以表示为任

/home/fenix/stuff\ with\ spaces
"/home/fenix/stuff with spaces"
'/home/fenix/stuff with spaces'

引号内的反斜杠或引用产生一个反斜杠或引号,因为引号的字符串的一部分。甲反斜杠反斜杠或报价类似地产生一个反斜杠或报价。

单引号更强;他们之间的一切都是文字。双引号允许变量,反引号扩展,和反斜杠引用。

所以"'/home/fenix/1\ Vari\ HDD/MTB/DTM\ Alos/'"./'/home/fenix/1\ Vari\ HDD/MTB/DTM\ Alos/这可能不是一个有效的路径,除非当前目录包含一个目录名是名副其实的单引号,等等(这里我把领先./只是为了让这个更清楚了)。

也许一个复杂的是,行情抑制通配符扩展;所以*.tif需要通配符是加引号。 (当然,严格地说,只有通配符必须加引号; *'.tif'*".tif"*\.\t\i\f会的工作了。)

还要注意的是$filename的值是完整路径通配符的每个扩展价值,没有修剪目录前缀或后缀扩展或任何其他魔术这样。我已经推测性地示出了如何将最后一个参数通过与修整掉的目录路径(参数替换${variable##pattern}检索variable与任何前缀匹配pattern修整掉的值)的文件名。所以输出文件应在当前目录下的土地,从通配符匹配INP ^ T(希望再在不同的目录,这样你就不会最终覆盖输入文件)。

最后,观察我们如何照顾总是使用周围包含文件名变量双引号。 (如果不这样做即使在一些相当普及教程一个常见的错误。该脚本会出现工作,直到你尝试处理与不规则间距或文字星号等文件名)

古怪PATH分配看起来奇怪了。是否gdalwarp执行外部命令,你真的那么希望它只能找到/usr/bin外部命令?或者,也许你的意思运行/usr/bin/gdalwarp(尽管设置正确的PATH在脚本的开头会可以说是比硬编码特定的绝对路径更好)。

© www.soinside.com 2019 - 2024. All rights reserved.