Передача строкового аргумента командной строки в сценарий bash для конкретной команды Linux

Вы ищете флаг -Nдля wget:

Wget will ask the server for the last-modified date. If the local file has the same timestamp as the server, or a newer one, the remote file will not be re-fetched. However, if the remote file is more recent, Wget will proceed to fetch it.

подробнее

0
28.03.2020, 05:55
2 ответа

Попробуйте экспортировать $1в свой скрипт.

#!/usr/bin/env bash

pattern=$1
export pattern

find. -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$pattern"' \;

Но предлагаю переписать на

#!/usr/bin/env bash
pattern=$1
export pattern

find. -name '*.pdf' -exec sh -c 'for f; do
  pdftotext "$f" - | grep --with-filename  --color "$pattern"
done' _ {} +

Может быть, добавить --label=$patternтакже

3
19.03.2021, 02:31

Вам необходимо передать параметр $0в качестве имени оболочки для сообщений об ошибках и позиционный параметр $1в вызов sh -c '...':

#!/bin/bash

find. -name '*.pdf' -exec sh -c '
  pdftotext "{}" - | grep --with-filename --label="{}" --color "$1"
' sh "$1" \;

Здесь shиспользуется, поскольку$0(может быть любым именем )и исходный аргумент "$1"передается как позиционный параметр $1.

Если у вас установлен pdfgrep, вам не понадобится преобразование pdf в текст и дополнительная оболочка:

find. -name '*.pdf' -exec pdfgrep -H "$1" {} \;
2
19.03.2021, 02:31

Теги

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