Измените первую строку с:
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 делает что-то другое для его сохранения. Я искал ответ на тот же вопрос, но получал противоречивые результаты, сравнивая числа вместо строк. В любом случае не помешает попробовать использовать экспорт перед первым оператором.
Сначала перейдите в архив папки, затем запустите следующее:
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
Создайте сценарий, который будет принимать произвольное количество аргументов и переименовывать файлы, удаляя произвольные расширения. Например,
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
. Вы можете использовать подстановку переменных, например:
MYVAR="List for 2016.doc.irolox"
echo ${MYVAR%.*}
Вышеупомянутое удаляет кратчайшее совпадение . *
из внутренней части значения переменной.
Таким образом, вы можете переименовать файл, используя:
mv "${MYVAR}" "${MYVAR%.*}"