Удалить рекурсивно двойное расширение, добавленное «глупой» программой-вымогателем Crypt0L0cker

Измените первую строку с:

switch=$(ssh 192.16810.10.10 egrep somefile /tmp/tmpfile.txt)

На следующее:

export switch=$(ssh 192.16810.10.10 egrep somefile /tmp/tmpfile.txt)

Я сталкивался с почти идентичной проблемой много раз раньше или когда при увеличении Переменная. Где переменная = $ переменная ++ или переменная = $ переменная + 1 добавит текстовую строку «+ 1» или «++» до конца каждый раз, когда он зацикливался, а не увеличивался, как должен.

Использование let variable = $ variable ++ или let variable = $ variable + 1 немедленно устраняет проблему. Использование экспорта также работало, если все было установлено до начала цикла.

Я считаю, что bash делает что-то не так, когда сохраняет эту переменную. Таким образом, сравнение активизируется, а использование let / export делает что-то другое для его сохранения. Я искал ответ на тот же вопрос, но получал противоречивые результаты, сравнивая числа вместо строк. В любом случае не помешает попробовать использовать экспорт перед первым оператором.

2
13.12.2016, 11:43
3 ответа

Сначала перейдите в архив папки, затем запустите следующее:

find | awk -F'.' '{if ($3 != "" && $4 != "" ){system("mv "$0" ./"$2"."$3)}}'

это будет искать каждый файл в папке и в вложенные папки, и если он обнаружит, что файл имеет расширение буксировки, он переименует его только с первым расширением

, например, папка перед командой:

.
./lolo.doc
./soso
./soso/jojo.doc.koko.momo
./kokooiko.doc.soso
./jojo.doc.koko

папка после команды:

.
./lolo.doc
./kokooiko.doc
./jojo.doc
./soso
./soso/jojo.doc
2
27.01.2020, 22:10

Решение

Создайте сценарий, который будет принимать произвольное количество аргументов и переименовывать файлы, удаляя произвольные расширения. Например,

cat > /tmp/rename_script.sh <<'EOF'
#!/bin/bash
while [ $# -gt 0 ]; do
  mv "$1" "${1%.*}"
  #alternatively to strip multiple extensions
  #mv "$1" "${1%.doc.*}.doc"
  shift
done
EOF
#enable execute perms
chmod 755 /tmp/rename_script.sh

Следующая команда find передаст один или несколько затронутых файлов в качестве аргументов в rename_script.sh ( -execdir выполнит rename_script.sh из рабочего каталога затронутых файлов). Ниже приводится пример.

find /path/to/affected/dir -type f -name '*.doc.*' -execdir /tmp/rename_script.sh {} +

ПРИМЕЧАНИЕ: Я рекомендую вам работать с небольшими выборками файлов для первоначального тестирования. Сделайте резервную копию старых «файлов программ-вымогателей», прежде чем применять это решение для всех файлов.

Протестировано с помощью find (GNU findutils) 4.4.2 в Debian 8 / Jessie.

Дополнительное чтение

  • man bash и найдите Специальные параметры , Расширение параметров и Составные команды .
  • человек найдите и найдите параметр -execdir .
0
27.01.2020, 22:10

Вы можете использовать подстановку переменных, например:

MYVAR="List for 2016.doc.irolox"
echo ${MYVAR%.*}

Вышеупомянутое удаляет кратчайшее совпадение . * из внутренней части значения переменной.

Таким образом, вы можете переименовать файл, используя:

mv "${MYVAR}" "${MYVAR%.*}"
0
27.01.2020, 22:10

Теги

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