Попробуйте следующее:
find folder1 -type f -iname '*.flv' -exec bash -c \
'f=${1#folder1/}; [ -f "folder2/${f%.flv}.mp4" ] ||
scripts/script.sh "${1%.flv}"' none {} \;
Это будет работать с файлами, имена которых содержат пробелы или другие сложные символы.
find folder1 -type f -iname '* .flv'
Это находит файлы flv
-exec bash -c '...'
Для каждого найденного файла flv это говорит find запустить bash, который запускает скрипт в кавычках (см. ниже).
f = $ {1 # folder1 /}
Это создает переменную f
, которая имеет имя файла flv без начального каталога.
[-f "folder2 / $ {f% .flv} .mp4"]
Это проверяет, существует ли соответствующий файл mp4 .
||
Это указывает bash выполнить следующую команду, только если предыдущая команда вернула false (другими словами, если такой файл mp4 не был найден).
scripts / script.sh "$ {1% .flv}" '
Это запускает ваш сценарий для тех flv-файлов, в которых отсутствуют файлы mp4. Файлы поставляются в script.sh
с удаленной частью .flv
.
none {}
Это указывает bash назначить строку none
на $ 0
(этот заполнитель никогда не используется) и назначить имя файла, найденного find
, обозначенный {}
, в переменную оболочки $ 1
.
\;
Это сигнализирует о завершении команды find -exec
.
На самом деле, кажется, что простого способа (не существует, учитывая, что простой -способ прост -cdd )для точной настройки пакетов, поставляемых с установочным носителем Debian. На самом деле можно настроить его репозиторий, учитывая, что он так или иначе разрешает все зависимости. (см.:Создание пользовательского набора компакт-дисков)
Тем не менее, для конкретного случая резервного копирования можно использовать в его простой -конфигурации cdd (profiles/[profile].conf )параметры:
backports=true
backports_packages="[package_list_with_dependencies]"
Если вы знаете, как создать список пакетов, просто поместите его в simple-cdd
файл профиля .downloads
. Эти пакеты вместе с зависимостями будут включены в каталог /pool/main/
результирующего файла образа .iso
.