Выполнение каталога, полного .sh файлов с одной командой

У меня есть каталог с большим количеством .sh файлов в нем, все из которых, когда выполнено, открывают терминал и начинают загрузку youtube-dl. С тех пор существуют так многие, я надеялся найти способ активировать их внезапно, открыв несколько различных терминалов сразу, в противоположность выполнению их всех отдельно. Я все еще очень плохо знаком с программированием, таким образом, я не абсолютно уверен, как сделать это и мог ли я создать сценарий для выполнения их всех, используйте команду и т.д. Любая справка ценится, спасибо.

7
задан 30 April 2017 в 06:02

4 ответа

В то время как можно действительно выполнить весь .sh, файлы в каталоге с для цикла как предложили Yaron, это действительно по сложному подходу для взятия. Не пишите много сценариев, если единственной разницей между ними будет RL, то они загрузят! И нет абсолютно никакой причины породить окно терминала для каждого из них также!

Вместо этого запишите свои URL YouTube в файл, один на строку:

http://youtube.com/foo
http://youtube.com/bar
http://youtube.com/baz

Затем для загрузки их, использование (file название файла с URL):

while read url; do
    youtube-dl "$url"
done < file

, Который загрузит каждое видео в файле, один за другим. Если Вы хотите загрузить их всех одновременно (не хорошая идея, если у Вас есть слишком многие), можно выполнить каждую команду загрузки в фоновом режиме путем добавления &:

while read url; do
    youtube-dl "$url" &
done < file
10
ответ дан 23 November 2019 в 06:20

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

chmod +x *.sh

следующий сценарий возьмет все концы файлов с .sh и выполнит их.

#/bin/bash
for shfile in *.sh
do
    ./$shfile
done

Вы можете скопировать/вставить вышеупомянутые строки (без первой строки #/bin/bash) в Ваш терминал, и это добьется цели (благодарит @terdon за Ваш комментарий).

можно сохранить этот сценарий в другой папке (например, /tmp/execute_all.sh и заставить его выполниться - способное использование:

chmod +x /tmp/execute_all.sh

Затем входят в каталог с эти .sh файлы и выполняют использование сценария:

/tmp/execute_all.sh

сценарий попытается выполнить все файлы, который заканчивается .sh

2
ответ дан 23 November 2019 в 06:20

Если программа веб-т.е. для Linux, Попытка, делающая php файл для обработки оболочки. и файл оболочки для обработки php..

, Например: файл runAllShell.php может содержать цикл.:

<?php
// Developed by A T.
// Count the files
$directory = '/put/directory/path_here/';
$files = glob($directory . '*.*');

if ( $files !== false )
{
    $filecounter = count( $files );

}
else
{
    echo "No Files were found";
}
$fileCount = $filecounter;

// Start the index
$fileNumber = 1;
while($fileNumber <= fileCount){
shell_exec('$fileNumber . ".sh"');
// get some feedback
echo "The ".$fileNumber." file has been excecuted";
// increment file number
$fileNumber++;

}
?>

удостоверяются, что все .sh файлы в каталоге численно заказаны, чтобы это работало т.е.: 1.sh 2.sh 3.sh и так далее.

0
ответ дан 23 November 2019 в 06:20

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

cat urls.txt | parallel --retries 50 --timeout 1000% --joblog +my.log youtube-dl

Это выполнит одно задание на ядро процессора и попробует 50 раз, если загрузка перестанет работать. Это уничтожит задания, которые берут 10 дольше, чем среднее время выполнения (например, если загрузка застревает). Это также добавит в файл my.log, таким образом, Вы будете видеть состояние каждого задания.

0
ответ дан 23 November 2019 в 06:20

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

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