Разрешено ли это в операторе `if`?

Ну, это каталог и ( -тип d ), поэтому он печатается. Вы можете попробовать установить минимальную глубину

find ./d -mindepth 1 -type d
-1
26.05.2019, 13:07
3 ответа

первое разрешено, второе не сработает, но если поставить точку с запятой перед mkdirтоже сработает.

0
28.01.2020, 05:14
#!/bin/bash
set -e
if [ "$1" == "cropit" ]; then
   ITS_CROP_TIME="$(
        mkdir cropped;
        for i in *.mp4; do 
           ffmpeg -i "$i" -filter:v "crop=1920:980:0:-100" cropped/"${i%.*}.mp4"
        done
        rm -r./*.mp4
        cd cropped
        cp -r./*.mp4../
    )"
fi

https://www.shellcheck.net/

-1
28.01.2020, 05:14

Я предполагаю, что вы хотите установить переменную ITS_CROP_TIMEв набор команд для последующего запуска?

Вот для чего нужны функции:

crop_all_in_dir () {
    local source_dir="$1"
    local dest_dir="$2"

    mkdir -p "$dest_dir"

    for file in "$source_dir"/*.mp4; do
        [ ! -f "$file" ] && continue
        ffmpeg -i "$file" -filter:v "crop=1920:980:0:-100" "$dest_dir/(basename "${file%.*}").mp4"
    done
}

Затем вы можете вызвать это позже в скрипте как

# optional cropping
if [ "$1" = "cropit" ]; then
    crop_all_in_dir. cropped
fi

т. е. обрезать все *.mp4файлы в текущем каталоге и поместить обрезанные файлы в каталог cropped(подкаталог текущего каталога ), создав выходной каталог, если он еще не существует.

Функция выполняет обрезку не -деструктивно, поэтому любая замена исходных файлов (вашими cpи т. д. )будет выполняться вне этой функции.

-2
28.01.2020, 05:14

Теги

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