Этот сценарий ищет новый каталог внутри parent1
, и если есть новый файл с расширением *.webm
, он запускает ffmpeg
, который вы разместили для него, и создает ту же структуру каталогов и передает в parent2
с расширением *.mp4
.
#!/usr/bin/env bash
find /opt/media/parent2 -type f -name '*.mp4' > parent2_files.txt
fifo="${TMPDIR:-${XDG_RUNTIME_DIR:-/tmp}}/fifo.$$"
trap 'rm -rf "$fifo"' EXIT
mkfifo "$fifo" || exit
check_file() {
find /opt/media/parent1 -type f -name '*.webm' -exec sh -c '
for f; do
f=${f/parent1/parent2}
f=${f%.webm}.mp4
echo "$f"
done
' _ {} + | grep -Fvwf parent2_files.txt
}
monitor() {
while read -r events file; do
if [[ $events == CREATE && $file == *.webm ]]; then
return
fi
done
}
inotifywait -mrq --format '%e %f' -e create /opt/media/parent1 > "$fifo" & pid=$!
monitor < "$fifo"
kill "$pid"
wait
while read -ru 9 parent2; do
mkdir -p "${parent2%/*}"
parent1=${parent2/parent2/parent1}
parent1=${parent1%.mp4}.webm
ffmpeg -loglevel panic -acodec libopus -i "$parent1" -strict experimental -movflags faststart "$parent2"
done 9< <(check_file)
"$0"
Структура каталогов по умолчанию.
/opt/
└── media
├── parent1
│ ├── AAAAAA
│ │ └── file1.webm
│ ├── BBBBBB
│ │ └── file2.webm
│ ├── CCCCCC
│ │ └── file3.webm
│ └── ZZZZZZ
│ └── file4.webm
└── parent2
├── AAAAAA
│ └── file1.mp4
├── BBBBBB
│ └── file2.mp4
├── CCCCCC
│ └── file3.mp4
└── ZZZZZZ
└── file4.mp4
Если новые каталоги добавляются в parent1
/opt/
└── media
├── parent1
│ ├── AAAAAA
│ │ └── file1.webm
│ ├── BBBBBB
│ │ └── file2.webm
│ ├── CCCCCC
│ │ └── file3.webm
│ ├── GGGGGG
│ │ └── file8.webm
│ ├── NNNNNN
│ │ └── file9.webm
│ ├── PPPPPP
│ │ └── file7.webm
│ ├── TTTTTT
│ │ └── file6.webm
│ ├── XXXXXX
│ │ └── file5.webm
│ └── ZZZZZZ
│ └── file4.webm
После скрипта.
/opt/
└── media
├── parent1
│ ├── AAAAAA
│ │ └── file1.webm
│ ├── BBBBBB
│ │ └── file2.webm
│ ├── CCCCCC
│ │ └── file3.webm
│ ├── GGGGGG
│ │ └── file8.webm
│ ├── NNNNNN
│ │ └── file9.webm
│ ├── PPPPPP
│ │ └── file7.webm
│ ├── TTTTTT
│ │ └── file6.webm
│ ├── XXXXXX
│ │ └── file5.webm
│ └── ZZZZZZ
│ └── file4.webm
└── parent2
├── AAAAAA
│ └── file1.mp4
├── BBBBBB
│ └── file2.mp4
├── CCCCCC
│ └── file3.mp4
├── GGGGGG
│ └── file8.mp4
├── NNNNNN
│ └── file9.mp4
├── PPPPPP
│ └── file7.mp4
├── TTTTTT
│ └── file6.mp4
├── XXXXXX
│ └── file5.mp4
└── ZZZZZZ
└── file4.mp4