Ваши чрезмерные кавычки мешают.
#!/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
в начале скрипта, возможно, будет лучше, чем жесткое кодирование определенного абсолютного пути).