Я бы использовал "дд". Единственным недостатком является конечное изображение будет того же размера, что и жесткий диск. Но так как это пирог, я предполагаю, что он не будет слишком большим.
Я просто копирую этот ответ -->https://unix.stackexchange.com/a/275778/130767
Да, есть способ. Машина даже не всегда должна быть одной и той же, поскольку Linux создает файловые системы /dev
, /proc
и /sys
на лету при загрузке ядра, что дает вам большую свободу для внесения довольно радикальных изменений в оборудование..
Допустим, ваша ОС установлена на диск /dev/sda
. Вы можете создать ISO-образ /dev/sda
и всех его разделов, какими бы они ни были, с помощью следующей команды:
dd if=/dev/sda of=/path/to/image.iso
Недостатком этого является то, что образ будет иметь полный размер указанного диска, как если бы (входной файл ), даже если этот диск не заполнен.
Если вы хотите клонировать диск непосредственно из /dev/sda,просто вставьте другой диск и используйте что-то вроде:
dd if=/dev/sda of=/dev/sdb
Я думаю, что было бы проще и надежнее не полагаться на find
в данном случае. У вас есть четко определенная структура каталогов, и на самом деле нет причин использовать find
для ее обхода, поскольку вы точно знаете, где находятся ваши файлы.
Вместо этого используйте цикл оболочки:
for dirpath in files/*/; do
set -- "$dirpath"/*.mp3
ffmpeg -i "concat:$1|$2" -c copy "$dirpath/both_${1##*/}"
done
или альтернативно
for dirpath in files/*/; do
(
cd "$dirpath"
set -- *.mp3
ffmpeg -i "concat:$1|$2" -c copy "both_$1"
)
done
Это зациклило бы ваши folder1
, folder2
и т. д. каталоги с путем к каждому каталогу в $dirpath
. Для каждого пути к каталогу тело цикла будет расширять шаблон подстановки *.mp3
в этом каталоге, а затем использовать первые два совпадения этого шаблона для запуска команды ffmpeg
. Никакой проверки не делается, чтобы убедиться, что мы действительно получили два совпадения шаблона.
Разница между двумя приведенными выше циклами заключается в том, что первый цикл не меняет свой каталог на каждый из каталогов $dirpath
, и поэтому $1
и $2
будут содержать путь к каталогу. Вот почему я использую "$dirpath/both_${1##*/}"
для создания пути к файлу с именем both_something.mp3
в каталоге (путь к каталогу должен быть удален с начала $1
, чтобы вставить подстроку both_
).
Другой цикл использует cd
для изменения каталога в каждый каталог в цикле. Таким образом, строки $1
и $2
будут именами файлов, а не путями с начальным путем к каталогу. Поскольку cd
происходит внутри подоболочки (, (...)
),изменение рабочего каталога влияет только на команды в круглых скобках.