Добавьте и выпишите названный переменной файл из списка переменных

Я думаю, что Вы хотите

file-name-version-[0-9].[0-9].[0-9].jar
3
01.02.2015, 04:01
3 ответа

Вы можете сделать очень простой Shell Poot, чтобы сделать это:

while read filename
do
    echo '#!/bin/bash' > $filename.sh
    echo "wget ftp://host.com/dir1/dir2/$filename/$filename.sra" >> $filename.sh
done < filenames.txt

Это читает каждую строку из filenames.txt и вызывает его И имеющееся значение , то для каждого из них выписан файл с именем $ filename.sh , где $ filename заменяется линией из файла. Этот файл имеет две строки: #! / Bin / bash , в каждом файле, а затем команду wget , которую вы хотели, снова с именем файла, замещенного в. >> представляют собой вторую строку в один и тот же файл, а не перезаписи. После запуска этого скрипта:

$ cat file1.sh 
#!/bin/bash
wget ftp://host.com/dir1/dir2/file1/file1.sra
$ cat file2.sh
#!/bin/bash
wget ftp://host.com/dir1/dir2/file2/file2.sra

Вы можете добавить третью строку внутри корпуса цикла:

chmod a+x "$filename.sh"

, чтобы сценарии были исполняемыми после этого. Поместите это сразу выше на вышеуказанную строку .


Если в любом из ваших файлов имена имеют пробелы или другие специальные символы в них, то это распадет (на нескольких уровнях), но для буквенно-цифровых имен будет в порядке.

0
27.01.2020, 21:42

Используйте эту команду:

awk -v url='ftp://host.com/dir1/dir2' '{printf "#!/bin/bash\nwget %s/%s/%s.sra\n",url,$1,$1 >$1".sh"}' filenames.txt

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

$ ls *.sh
file1.sh  file2.sh  file3.sh

Содержание каждого выглядит что-то вроде:

$ cat file1.sh
#!/bin/bash
wget ftp://host.com/dir1/dir2/file1/file1.sra

Как это работает

  • -V URL = 'ftp: //host.com/dir1/dir2'

    Это определяет URL как awk .

  • printf "#! / Bin / bash \ nwget% s /% s /% s.sra \ n", URL, $ 1, $ 1> $ 1 ".sh"

    Это отпечатывает каждый файл, который вам нужен. Часть > 1 $ ".sh" означает, что каждый скрипт оболочки записывается в файл, названный после загрузки файла с добавлением .sh .

0
27.01.2020, 21:42

Еще другое предложение, использующее для петли , printf , а также замена команд $ () :

for file in $(<filenames); do
    printf "%s\n%s\n" '#!/bin/bash' "wget ftp://host.com/dir1/dir2/${file}/${file}.sra" > "${file}.sh"
done

Нетребальная часть, вероятно, является $ (<имя файла) , что эквивалентно $ (имя файла CAT) , но немного быстрее.

0
27.01.2020, 21:42

Теги

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