Как мне перевести следующую команду «for / f» из cmd для эквивалентной команды в Linux centos 6,64?

359
Mike

Как я могу перевести следующую команду CMD в команду в linux centos 6,64?

for /f "tokens=1*" %i in (links.txt) do wget -O "%j" "%i" 

PS: links.txt - это файл с двумя столбцами, разделенными табуляцией, один со ссылкой, а другой с названием того, как сохранить файл.

Спасибо

2
Обратите внимание, что https://superuser.com не является бесплатным сервисом для написания скриптов / кодов. Если вы сообщите нам, что вы уже пробовали (включая скрипты / код, который вы уже используете) и где вы застряли, мы можем попытаться помочь с конкретными проблемами. Вам также следует прочитать [Как мне задать хороший вопрос?] (Https://superuser.com/help/how-to-ask). DavidPostill 6 лет назад 1
Подсказка: - [для] (https://ss64.com/bash/for.html) - разверните слова и выполните команды один раз для каждого члена в результирующем списке с именем, связанным с текущим членом. DavidPostill 6 лет назад 0
Дорогой Дэвид, привет, спасибо за твой ответ. Я пробовал формулу для / f "tokens = 1 *"% i в (links.txt) сделать wget -O "% j" "% i" В Linux, хотя это не работает. Только CMD, я не нашел ни одного поста, где говорится о том, как это сделать в Linux. Не могли бы вы помочь, как это сделать? Если так, большое спасибо Mike 6 лет назад 0
Итак, вы хотите перевести эту команду Windows в эквивалентную команду Linux? Если это так, пожалуйста, четко сформулируйте это в вопросе ([отредактируйте] это), потому что в настоящее время трудно понять, что вы пытаетесь сделать. Это не «формула», а «команда» - правильный термин. Наконец, комментарий Дэвида Постилла прав. Вы должны показать нам свои попытки и сказать, где вы застряли. Мы можем помочь вам, но не делать вашу работу. gronostaj 6 лет назад 0
Уважаемый gronostaj, привет, отредактировал вопрос согласно вашему предложению. Я сказал именно то, что я делаю, это команда, которую я объяснил выше в cmd. Эта статья предназначена для того, чтобы попросить помощи, если кто-то знает, как перевести эту команду в linux centos 6,64, потому что в linux не работает, и не нашел никакого руководства о том, как это сделать до сих пор. Спасибо Mike 6 лет назад 0
DavidPostill дал вам ссылку на объяснение цикла `for` в bash, самой распространенной оболочке Linux. Вы читали его? Что вы пробовали? gronostaj 6 лет назад 0

1 ответ на вопрос

2
Hastur

awk

Даже если это можно прочитать из файла и составить команду, которую вы хотите в цикле есть команда, которую вы можете найти уютнее: awk.

Если имя файла не содержит пробелов, вы можете использовать этот простой синтаксис для создания нужной команды, а затем перенаправить ( |) этот вывод в shell ( sh), которая его выполнит.
С $1вас возьмите 1-ую колонку, со $2второй и так далее ...

awk '' links.txt | sh 

Если в именах есть пробелы, вам нужно больше заниматься в тренажерном зале:

awk -F $'\t' '' links.txt | sh 

Здесь вы должны указать, что разделителем полей -Fявляется tab ( -F $'\t'), и вы должны напечатать "до и после имени файла. Поскольку вы находитесь внутри строки, вам нужно [ 2 ] избежать их
echo "Those are double quote\"".

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

Используйте man awkдля получения дополнительной помощи.

Привет Хастур, большое спасибо, отлично работает, спасибо Mike 6 лет назад 1
Ypu может добавить другой путь после `-O \" `и перед` "` ... или вы можете настроить скрипт из конечного каталога. Кстати, __Внимание: ___ для имен файлов unix допускается использование символов _не общего_ в качестве символа новой строки, что может внести некоторую путаницу в ваш план. Поиск _why небезопасен / благоприятен для анализа ls output_, чтобы узнать больше ... Hastur 6 лет назад 1
Здравствуйте @Hastur, спасибо за первое объяснение. Если внутри файла у меня есть только 1 столбец со ссылкой (а не 2 столбца), и я хочу, чтобы wget сохранил файл с тем же именем, что и столбец 1, как я могу обновить эту команду для этого? `awk '' links.txt | ш`? Я попытался просто удалить `$ 2 ', но это не сработало. большое спасибо Joao 6 лет назад 0
@Joao Обычно `awk '' links.txt | / bin / sh` должен работать ... и сохранить файл с исходным именем файла. Обратите внимание, что опция `-O` указывает имя вывода ...` man` может быть хорошим другом (в данном случае `man wget`). `:-)` Но это перебор ... посмотрим, что происходит с `wget -i links.txt`. Опять же `человек` действительно хороший друг! __` :-) ` Hastur 6 лет назад 0
Привет @Joao 1-й: Когда у вас есть собственный вопрос, лучше вместо этого публиковать новый вопрос, чем задавать его в комментарии (больше места, и это может быть полезно и для других). 2-й: ошибка зависит от того, что у вас внутри файла `:-)`, и в вопросе вы можете добавить некоторую строку файла, чтобы привести ее в качестве примера. 3-е: `man` - это помощь под Linux. Четвёртое: посмотрите пример того, как это работает `awk` (` gawk`): он строит строки построчно, вставляя текст из ввода в некоторых местах (`$ 1`, столбец` 1st`, `$ 2`the 2nd .. Так что `... wget -O / outputfolder /" $ 1 ".txt", $ 1`, чтобы добавить .txt в это место. Hastur 6 лет назад 0
Привет @Hastur, спасибо большое, он дал ошибку здесь, также прочитал человека, но не смог найти решение. Так что удалили мои новые комментарии здесь, которые не пришли к решению, так что можете сделать новое сообщение, как вы предложили. Спасибо Joao 6 лет назад 0

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