Как получить доступ к окончанию файла (до расширения) в Контура

Вы хотите использовать команду xargs :

$ ls -ctr | tail -1 | xargs cat

Это займет STDOUT команды tail -1 , и вместо использования его в качестве STDIN для команды cat будет использовать его как параметры для команды cat .

0
14.11.2018, 12:41
3 ответа

Первое замечание: в Unix не существует -расширения файла. .— это просто еще один символ. Итак, я ищу около ½ ваших файлов, убираю конец имени, готов вернуть его на (двумя разными способами ).

Это будет работать, но может содержать некоторые скрытые ошибки.

for f in *_B5.TIF   
do 
    i="$(echo "$f" | sed -r -e 's/(.*)_B5.TIF/\1/')"
    … ${i}_B4_SA.TIF -B ${i}_B5_SA.TIF …
done

Это должно быть более надежным

find. -iname "*_B5.TIF" -print0 | sed -0r -e 's/(.*)_B5.TIF/\1/' | xargs -0 -i … {}_B4_SA.TIF -B {}_B5_SA.TIF …

Пожалуйста, проверьте, так как у меня нет (, может быть небольшая ошибка ). И нет проверки ошибок. Ваша программа должна проверять соответствие -промахам.

0
28.01.2020, 02:41

Переберите файлы, составляющие половину пар, и для каждого такого файла создайте имя файла соответствующей пары и выходного файла:

for b4_file in./*_B4.TIF; do
    b5_file="${b4_file%_B4.TIF}_B5.TIF"
    ndvi_file="$HOME/Geodata/goteborg/croped/ndvi/${b4_file%_B4.TIF}_NDVI.TIF"

    if [ ! -f "$b5_file" ]; then
        printf 'Expected to find "%s" to go with "%s", but did not\n' "$b5_file" "$b4_file" >&2
        continue
    fi

    # do whatever it is you need to do with "$b4_file" and "$b5_file"

    gdal_calc.py -A "$b4_file" -B "$b5_file" --type=Float32 \
        --outfile="$ndvi_file --calc="(B-A)/(B+A)"

done
1
28.01.2020, 02:41

Поскольку вы используете Bash,вы можете использовать Расширение параметра , чтобы обрезать окончание и сохранить общую часть имени файла в новой переменной:

for f in *_B4.TIF ; do
    i="${f%_B4.TIF}"
    gdal_calc.py -A "${i}_B4.TIF" -B "${i}_B5.TIF" --outfile=".../${i}_NDVI.TIF"
done
0
28.01.2020, 02:41

Теги

Похожие вопросы