Прежде всего, я новичок с bash-скриптами, поэтому простите меня, если я делаю легкие ошибки.find - grep занимает слишком много времени
Вот моя проблема. Мне нужно было скачать сайт моей компании. Я выполняю это с помощью wget
без каких-либо проблем, но поскольку некоторые файлы имеют символ ?
, а окна не любят имена файлов с ?
, мне пришлось создать скрипт, который переименовывает файлы, а также обновляет исходный код всех файлов, вызывающих файл переименования.
Для этого я использую следующий код:
find . -type f -name '*\?*' | while read -r file ; do
SUBSTRING=$(echo $file | rev | cut -d/ -f1 | rev)
NEWSTRING=$(echo $SUBSTRING | sed 's/?/-/g')
mv "$file" "${file//\?/-}"
grep -rl "$SUBSTRING" * | xargs sed -i '' "s/$SUBSTRING/$NEWSTRING/g"
done
Это с 2 проблемы.
- Это длится слишком долго, я ждал более 5 часов и все еще идет.
- Похоже, что это добавление в исходный код, потому что, когда я останавливаю скрипт и ищу изменения, URL повторяется как 4 раза (или больше).
Спасибо всем за ваши комментарии, я постараюсь шаг 2 раздельных и посмотреть, также, как FYI, есть 3291 файлов, которые были загружены с Wget, все еще думая, что с помощью Баша скриптового предпочитают по сравнению с другими инструментами для это?
Вы уверены, что это на самом деле работает, не просто ожидая ввода? – Biffen
Обратите внимание, что более вероятно, что '?' символы в некоторых ваших URL-адресах вводят строку запроса. Это указывает на то, что основной ресурс, вероятно, является динамическим и может возвращать разные материалы в разное время. –
Вы можете выполнить инкрементную отладку, сначала используя эхо-файл, найденный в команде find, затем добавьте другие операции. – Inian