Создайте скрипт bash для обхода подкаталогов и выполните команду с помощью ffmpeg

Привет, у меня была такая же проблема, и вы можете сделать это, чтобы сделать восстановление из загрузки, и перейдите в оболочку и введите:

linux64
grub-install
update-grub2

, а затем перезагрузитесь, и это может работа хорошо этот способ.

3
задан 5 April 2017 в 09:09

5 ответов

Включить рекурсивное переключение в подкаталоги:

shopt -s globstar

Тогда вы могли бы сделать:

for f in **/*.m4a do printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "$PWD/${f%.m4a}.mkv" done > bulk.command.txt

printf 's %q цитирует строки так, чтобы они могли безопасно использовать в качестве ввода оболочки, поэтому вам не нужно возиться с кавычками:

%q quote the argument in a way that can be reused as shell input

Если вы сделаете этот сценарий, вы можете использовать аргументы, чтобы решить, следует ли использовать другой каталог для выходные файлы:

#! /bin/bash shopt -s globstar for f in **/*.m4a do printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "${1:-$PWD}/${f%.m4a}.mkv" done > bulk.command.txt

${foo:-bar} использует значение переменной foo, если оно не пустое или bar в противном случае, поэтому в этом случае он использует первый аргумент, если не empty и $PWD в противном случае.

В этом случае вам потребуется воссоздать структуру каталогов, что можно сделать с помощью mkdir -p:

#! /bin/bash shopt -s globstar for f in **/*.m4a do printf 'mkdir -p %q\n' "${1:-$PWD}/${f%/*}" printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "${1:-$PWD}/${f%.m4a}.mkv" done > bulk.command.txt

Вот если вы действительно необходимо создать сценарий для последующего использования. Лично я не вижу смысла - вы можете просто запустить цикл напрямую, когда вам действительно нужно его запустить:

#! /bin/bash shopt -s globstar for f in **/*.m4a do mkdir -p "${1:-$PWD}/${f%/*}" ffmpeg -i "$PWD/$f" -c:a copy "${1:-$PWD}/${f%.m4a}.mkv" done > bulk.command.txt
3
ответ дан 18 July 2018 в 15:31

Включить рекурсивное переключение в подкаталоги:

shopt -s globstar

Тогда вы могли бы сделать:

for f in **/*.m4a do printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "$PWD/${f%.m4a}.mkv" done > bulk.command.txt

printf 's %q цитирует строки так, чтобы они могли безопасно использовать в качестве ввода оболочки, поэтому вам не нужно возиться с кавычками:

%q quote the argument in a way that can be reused as shell input

Если вы сделаете этот сценарий, вы можете использовать аргументы, чтобы решить, следует ли использовать другой каталог для выходные файлы:

#! /bin/bash shopt -s globstar for f in **/*.m4a do printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "${1:-$PWD}/${f%.m4a}.mkv" done > bulk.command.txt

${foo:-bar} использует значение переменной foo, если оно не пустое или bar в противном случае, поэтому в этом случае он использует первый аргумент, если не empty и $PWD в противном случае.

В этом случае вам потребуется воссоздать структуру каталогов, что можно сделать с помощью mkdir -p:

#! /bin/bash shopt -s globstar for f in **/*.m4a do printf 'mkdir -p %q\n' "${1:-$PWD}/${f%/*}" printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "${1:-$PWD}/${f%.m4a}.mkv" done > bulk.command.txt

Вот если вы действительно необходимо создать сценарий для последующего использования. Лично я не вижу смысла - вы можете просто запустить цикл напрямую, когда вам действительно нужно его запустить:

#! /bin/bash shopt -s globstar for f in **/*.m4a do mkdir -p "${1:-$PWD}/${f%/*}" ffmpeg -i "$PWD/$f" -c:a copy "${1:-$PWD}/${f%.m4a}.mkv" done > bulk.command.txt
3
ответ дан 24 July 2018 в 20:39
  • 1
    @ Занне, конечно, спасибо! – muru 5 April 2017 в 11:34
  • 2
    спасибо за замечательную обратную связь, я попытаюсь прочитать ее снова позже, когда мой разум хочет сотрудничать с обучением и чтением. Я дам вам знать, делает ли это то, что я ищу, чтобы выполнить – Monery 7 April 2017 в 03:48

Включить рекурсивное переключение в подкаталоги:

shopt -s globstar

Тогда вы могли бы сделать:

for f in **/*.m4a do printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "$PWD/${f%.m4a}.mkv" done > bulk.command.txt

printf 's %q цитирует строки так, чтобы они могли безопасно использовать в качестве ввода оболочки, поэтому вам не нужно возиться с кавычками:

%q quote the argument in a way that can be reused as shell input

Если вы сделаете этот сценарий, вы можете использовать аргументы, чтобы решить, следует ли использовать другой каталог для выходные файлы:

#! /bin/bash shopt -s globstar for f in **/*.m4a do printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "${1:-$PWD}/${f%.m4a}.mkv" done > bulk.command.txt

${foo:-bar} использует значение переменной foo, если оно не пустое или bar в противном случае, поэтому в этом случае он использует первый аргумент, если не empty и $PWD в противном случае.

В этом случае вам потребуется воссоздать структуру каталогов, что можно сделать с помощью mkdir -p:

#! /bin/bash shopt -s globstar for f in **/*.m4a do printf 'mkdir -p %q\n' "${1:-$PWD}/${f%/*}" printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "${1:-$PWD}/${f%.m4a}.mkv" done > bulk.command.txt

Вот если вы действительно необходимо создать сценарий для последующего использования. Лично я не вижу смысла - вы можете просто запустить цикл напрямую, когда вам действительно нужно его запустить:

#! /bin/bash shopt -s globstar for f in **/*.m4a do mkdir -p "${1:-$PWD}/${f%/*}" ffmpeg -i "$PWD/$f" -c:a copy "${1:-$PWD}/${f%.m4a}.mkv" done > bulk.command.txt
3
ответ дан 31 July 2018 в 13:27
  • 1
    @ Занне, конечно, спасибо! – muru 5 April 2017 в 11:34
  • 2
    спасибо за замечательную обратную связь, я попытаюсь прочитать ее снова позже, когда мой разум хочет сотрудничать с обучением и чтением. Я дам вам знать, делает ли это то, что я ищу, чтобы выполнить – Monery 7 April 2017 в 03:48

Включить рекурсивное переключение в подкаталоги:

shopt -s globstar

Тогда вы могли бы сделать:

for f in **/*.m4a do printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "$PWD/${f%.m4a}.mkv" done > bulk.command.txt

printf 's %q цитирует строки так, чтобы они могли безопасно использовать в качестве ввода оболочки, поэтому вам не нужно возиться с кавычками:

%q quote the argument in a way that can be reused as shell input

Если вы сделаете этот сценарий, вы можете использовать аргументы, чтобы решить, следует ли использовать другой каталог для выходные файлы:

#! /bin/bash shopt -s globstar for f in **/*.m4a do printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "${1:-$PWD}/${f%.m4a}.mkv" done > bulk.command.txt

${foo:-bar} использует значение переменной foo, если оно не пустое или bar в противном случае, поэтому в этом случае он использует первый аргумент, если не empty и $PWD в противном случае.

В этом случае вам нужно будет воссоздать структуру каталогов, что можно сделать с помощью mkdir -p:

#! /bin/bash shopt -s globstar for f in **/*.m4a do printf 'mkdir -p %q\n' "${1:-$PWD}/${f%/*}" printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "${1:-$PWD}/${f%.m4a}.mkv" done > bulk.command.txt

Вот если вы действительно необходимо создать сценарий для последующего использования. Лично я не вижу смысла - вы можете просто запустить цикл напрямую, когда вам действительно нужно его запустить:

#! /bin/bash shopt -s globstar for f in **/*.m4a do mkdir -p "${1:-$PWD}/${f%/*}" ffmpeg -i "$PWD/$f" -c:a copy "${1:-$PWD}/${f%.m4a}.mkv" done > bulk.command.txt
3
ответ дан 31 July 2018 в 23:40
  • 1
    @ Занне, конечно, спасибо! – muru 5 April 2017 в 11:34
  • 2
    спасибо за замечательную обратную связь, я попытаюсь прочитать ее снова позже, когда мой разум хочет сотрудничать с обучением и чтением. Я дам вам знать, делает ли это то, что я ищу, чтобы выполнить – Monery 7 April 2017 в 03:48

Включить рекурсивное глобусирование для рекурсии в подкаталоги:

shopt -s globstar

Тогда вы могли бы сделать:

for f in **/*.m4a
do
    printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "$PWD/${f%.m4a}.mkv"
done > bulk.command.txt

printf 's %q цитирует строки так, чтобы они могли безопасно использовать в качестве ввода оболочки, поэтому вам не нужно возиться с кавычками:

  %q    quote the argument in a way that can be reused as shell input

Если вы сделаете это сценарием, вы можете использовать аргументы, чтобы решить, следует ли использовать другой каталог для выходные файлы:

#! /bin/bash
shopt -s globstar

for f in **/*.m4a
do
    printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "${1:-$PWD}/${f%.m4a}.mkv"
done > bulk.command.txt

${foo:-bar} использует значение переменной foo, если оно не пустое, или bar в противном случае, поэтому в этом случае он использует первый аргумент, если не empty и $PWD в противном случае.

Вам нужно будет воссоздать структуру каталогов в этом случае, что можно сделать с помощью mkdir -p:

#! /bin/bash
shopt -s globstar

for f in **/*.m4a
do
    printf 'mkdir -p %q\n' "${1:-$PWD}/${f%/*}"
    printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "${1:-$PWD}/${f%.m4a}.mkv"
done > bulk.command.txt

Вот если вы действительно необходимо создать сценарий для последующего использования. Лично я не вижу смысла - вы можете просто запустить цикл напрямую, когда вам действительно нужно его запустить:

#! /bin/bash
shopt -s globstar

for f in **/*.m4a
do
    mkdir -p "${1:-$PWD}/${f%/*}"
    ffmpeg -i "$PWD/$f" -c:a copy "${1:-$PWD}/${f%.m4a}.mkv"
done > bulk.command.txt
3
ответ дан 6 August 2018 в 22:42

Другие вопросы по тегам:

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