Переименовать файл с помощью grep и для

Объяснение SSH

Может быть, кто-то может вмешаться, если я неправильно понял, но я так понял, что это работает.

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

proxychains отправляет трафик на 8080 -> Отправка трафика на порт прослушивания 2222 на удаленной жертве, который возвращается к петле 22 на этом хосте. Теперь этот хост контролирует, куда идет трафик. Вот почему вам нужно развернуться таким образом.

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

[ЗАКАТЕЛЬ]8080 < --> 2222[ЖЕРТВА]< -->22[ЖЕРТВА :]

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

[Атакующий]8080 < --> 22[ЖЕРТВА :]

1
22.03.2020, 21:59
4 ответа
find. -type f \( -name "*.txt" -o -name "*.data" -o -name "*.conf" \) -exec sh -c '
    for file in "$@"; do
        if grep -qF "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" "$file"; then
            mv -- "$file" "${file%.*}.xml"
        fi
    done
' findshell {} +

Я думаю, что findболее адекватен в данном контексте. Он рекурсивно ищет обычные файлы с расширениями .txt, .dataи .confи проверяет, присутствует ли указанная вами строка в каждом из них. Если да, то он изменит расширение на .xmlкомандой mv.

Если вы не уверены, будет ли код работать должным образом, вы можете добавить echoперед mv, чтобы посмотреть, что он делает.

Я также должен упомянуть, что этот сценарий не зависит от не -POSIX-утилит.

2
28.04.2021, 23:19

Вы можете попробовать это:

for file in *.{txt,conf}; do 
  [[ $(grep "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" "$file") ]] && \
  mv "$file" "${file%.*}.xml" || echo "$file" " does not match"
done
1
28.04.2021, 23:19

Использованиеbash:

shopt -s globstar dotglob nullglob extglob

string='<?xml version="1.0" encoding="UTF-8"?>'

for pathname in./**/*.@(txt|data|conf); do
    if [[ -f $pathname ]] && grep -q -F "$string" "$pathname"; then
        mv -i "$pathname" "${pathname%.*}.xml"
    fi
done

Я начинаю с установки ряда опций оболочки, которые обычно не устанавливаются в bashпо умолчанию:

  • globstarвключает шаблон подстановки **, который рекурсивно сопоставляется с подкаталогами.
  • dotglobзаставляет шаблоны подстановки соответствовать скрытым именам.
  • nullglobзаставляет несоответствующий шаблон -полностью исчезнуть вместо того, чтобы оставаться нераскрытым. Это гарантирует, что наш цикл позже вообще не запустится, если не будет совпадения.
  • extglobвключает расширенные шаблоны подстановки, например @(txt|data|conf), который соответствует одной из строк внутри круглых скобок.

Затем мы перебираем имена-кандидаты в цикле и проверяем каждое из них на заданную строку. Если строка найдена, файл переименовывается путем замены суффикса имени файла после последней точки на xml.

1
28.04.2021, 23:19

Если вам нужно сделать это с grepи for, то, возможно, что-то вроде этого?

grep -RlZ '<?xml version="1.0" encoding="UTF-8"?>' --include "*.txt" --include "*.data" --include "*.conf" | 
  xargs -0 sh -c 'for f; do echo mv -- "$f" "${f%.*}.xml"; done' sh

(удалите echoпосле того, как убедитесь, что все работает правильно ).

  • grep -RlZвыводит нулевой -список имен файлов с разделителями, в которых найдены совпадения

  • xargs -0передает этот нулевой -разделенный список вsh -c

  • for fперебирает имена файлов как позиционные параметры

или (, если вам разрешено использовать whileвместо for), вы можете пропустить xargsи дополнительный сценарий оболочки, например

grep -RlZ '<?xml version="1.0" encoding="UTF-8"?>' --include "*.txt" --include "*.data" --include "*.conf" | 
  while IFS= read -r -d '' f; do echo mv -- "$f" "${f%.*}.xml"; done
2
28.04.2021, 23:19

Теги

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