Как для переименования файлов tar.gz на основе их соответствия в текстовом файле

Rasberry pi, как известно, недостаточно оборудован для USB, а USB 3G модем требует достаточно большой мощности. Может оказаться, что модему требуется примерно то количество, которое может доставить средний rpi, где это можно сделать, а другому нет (из-за различий, которые всегда будут происходить в производстве).

Я бы предложил вам попробовать подключить модемы 3G к USB-концентратору с питанием; это, вероятно, устранит вашу проблему.

-121--228895-

Этот вопрос был задан некоторое время назад, но он может кому-то помочь.

При синхронизации с сервером просто возникает одно и то же сообщение об ошибке. В моем случае отсутствовала папка на стороне сервера, с которой я хотел синхронизироваться. Создание папки решило проблему.

-121--133606-

У меня есть файл, первая строка которого начинается с xml [...] Если я попытаюсь убедиться, что начало строки /^ не соответствует

Возможно, что тексту предшествует Byte Order Mark (BOM) . Они распространены в файлах UTF-16 формата (особенно в системах Windows) и используются для указания длины байтов, содержащих 16-битные символы в файле.

Вы можете проверить это с помощью одного из многих шестнадцатеричных инструментов дампа ( шестнадцатеричный , шестнадцатеричный , od -c для трех) и просмотреть первые несколько символов. Если в качестве первых двух символов вы видите FF FE или FE FF , это спецификация.

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

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

3
21.04.2018, 10:44
4 ответа

Другой способ, предполагающий отсутствие пробелов в имени файла:

$ xargs -n2 echo mv -i <<<"$(sed '1d; s/$/.tar.gz/' names.txt)"
mv -i TDF.tar.gz Sample1.tar.gz
mv -i DFG.tar.gz Sample2.tar.gz
mv -i GHY.tar.gz Sample3.tar.gz

В sed '1d; s/$/.tar.gz/'1dудаляет самую первую строку входного имени файла names.txt, затем s/$/.tar.gz/добавляет .tar.gzв конец каждой строки ($указывает на конец строки ).

В xargs -n2мы читаем два набора строк, разделенных пробелом/ или табуляцией.

Примечания:

  • Основываясь на выводе cat -e names.txt, ваш файл не относится к типу Unix end -из формата строки -, чтобы преобразовать его в тип Unix, выполните dos2unix fileName, затем примените указанную выше команду для переименования.

  • снять echoдля работы всухую -.

ссылка на Что такое ^Mи как от него избавиться?

1
27.01.2020, 21:30

Предполагая, что ваши имена никогда не содержат пробелов и что ваш names.txtфайл имеет заголовок в первой строке, как показано, вы можете сделать:

tail -n +2 names.txt | while read old new; do
    mv -i "$old" "$new"
done 

tail -n +2напечатает все строки файла, начиная со второй, поэтому заголовок будет пропущен. Затем опция -iдля GNU mvговорит ему запрашивать вас перед перезаписью существующего файла (на случай конфликта имен ).

0
27.01.2020, 21:30

Использование оболочки :Я предполагаю, что имена tar-файлов не содержат пробелов, а имена примеров не содержат пробелов:

{
    read header
    while read -r tarfile sample; do
        if [[ -f "$tarfile" ]]; then
            echo mv "$tarfile" "$sample.tar.gz"
        fi
    done
} < names.txt
0
27.01.2020, 21:30

Одной команды sedдолжно быть достаточно, учитывая формат входного файла:

sed '1!{s/^/mv /;s/$/.tar.gz/e}' names.txt

Демо, безe:

sed '1!{s/^/mv /;s/$/.tar.gz/}' names.txt

Выход:

Tar.gz_filenames       Sample_Names
mv TDF.tar.gz                Sample1.tar.gz
mv DFG.tar.gz                Sample2.tar.gz
mv GHY.tar.gz                Sample3.tar.gz
0
27.01.2020, 21:30

Теги

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