Переименование файлов при сохранении частей

Мне нужно переименовать части нескольких файлов, сохранив IP-адрес, который находится в именах файлов.

Например,

Abc_192.168.1.164_001.txt Abc_10.11.76.112_001.txt Abc_54.78.1.1_002.txt 

Мне нужно сохранить часть «Abc_», а также IP-адрес. Все после замены должно быть заменено меткой даты и времени. Я бы добавил текущую метку даты и времени как «_yymmdd-yymmdd-hhmmss», и мы будем менять расширение на «.csv». Это будет работать в Linux.

2 Solutions collect form web for “Переименование файлов при сохранении частей”

Вот простой цикл оболочки, чтобы (тщательно) переименовать файлы, как я думаю, вы спрашиваете:

 d=$(date +%y%m%d-%y%m%d-%H%M%S) for f in Abc_*.*.*.*_*.txt do new=${f%_*}_${d}.csv [ ! -f "$new" ] && mv "$f" "$new" done 

Сначала он записывает временную метку в формате, который вы написали, в переменную с именем d . Затем он перемещается по упрощенному формату глобуса, чтобы забрать все файлы, чье имя начинается с «Abc_», а затем есть что-нибудь между тремя периодами, за которым следует что-либо, а затем подчеркивание и все, и заканчивается на «.txt».

Он вычисляет новое имя файла, удаляя все (включая и) после последнего подчеркивания, затем добавляет метку времени ( ${d} ) и новое расширение «.csv».

Если это новое имя файла не существует, оно будет переименовывать файл. Удалите [ ! -f "$new" ] && [ ! -f "$new" ] && part, если вам не нужно сбрасывать существующие файлы.

Добавьте в echo перед mv если вы хотите увидеть сухую проверку того, что она сделает, прежде чем выполнять ее.

Когда я запускаю его, я вижу:

 $ touch Abc_10.11.76.112_001.txt Abc_192.168.1.164_001.txt Abc_54.78.1.1_002.txt $ d=$(date +%y%m%d-%y%m%d-%H%M%S) $ for f in Abc_*.*.*.*_*.txt; do new=${f%_*}_${d}.csv; [ ! -f "$new" ] && mv "$f" "$new"; done $ ls -1 Abc_10.11.76.112_160913-160913-140649.csv Abc_192.168.1.164_160913-160913-140649.csv Abc_54.78.1.1_160913-160913-140649.csv 

Если по дате и отметке времени вы имеете в виду время модификации файла, с помощью zsh вы могли бы сделать:

 zmodload zsh/stat autoload zmv zmv -n '(*_*_)*(.txt)' '$1$(zstat -F %FT%T%z +mtime -- $f)$2' 

(удалите -n чтобы действительно переименовать)

Обратите внимание, что для тех файлов .txt которые являются символическими ссылками, метка времени основана на времени модификации цели символической ссылки, а не самой символической ссылки. Добавьте параметр -L в zstat чтобы zstat использовать время модификации самой символической ссылки.

%FT%T%z дает однозначную локальную 2016-09-13T17:32:17+0100 времени, такую ​​как 2016-09-13T17:32:17+0100 . Вы можете адаптироваться к вашим потребностям с использованием стандартного формата strftime() (так же, как и с date +<format> ). Однако обратите внимание, что zstat не поддерживает zstat точность (для файловых систем, которые сохраняют время модификации с точностью до второй секунды).

Если в системе GNU вы можете использовать GNU date -r вместо zstat чтобы получить эти наносекунды:

 $ zmv -n '(*_*_)*(.txt)' '$1$(date -r $f +%FT%T.%N%z)$2' mv -- Abc_192.168.1.164_001.txt Abc_192.168.1.164_2016-09-13T17:32:17.368805094+0100.txt 

Как и для zstat , это время модификации цели символических ссылок, а не самой символической ссылки. date не имеет возможности использовать mtime символической ссылки, хотя вместо этого вы можете использовать GNU find .

  • Что вы фильтруете / исключаете список при выполнении резервного копирования с помощью rsync?
  • Как заменить символическую ссылку на эквивалентную жесткую ссылку?
  • Сводка использования диска для пользователя
  • Найти файлы gif / jpeg с расширением png и преобразовать в png
  • Как переименовать файл в сценарии bash один за другим
  • Файлы по умолчанию в домашнем каталоге для каждого пользователя
  • Как я могу открыть файлы на моем внешнем жестком диске?
  • Возможно ли создать динамический 1-байтовый файл в Linux?
  • Как передать файл по протоколу Windows Share из научного Linux?
  • Как расшифровать отдельные файлы Encrypt Encrypted?
  • Как отображать метаинформацию для разных видов времени файла?
  • Interesting Posts

    Что означают эти команды?

    Сортировка вывода поиска до трубопровода в openssh

    Проблема не может установить локаль; убедитесь, что $ LC_ * и $ LANG верны!

    Как скопировать или переместить в папку в Nautilus 2.30.1, как в проводнике Windows?

    Поиск файлов более поздним, чем один день, и копия

    отключение управления заданиями в bash (CTRL-Z)

    Apache: как получить доступ к файлам с использованием учетных данных запрашивающего пользователя?

    файл поиска для строки (взятый из файла), затем замените любой экземпляр другой строки, которая попадает в первое совпадение

    Установите выравнивание числовых столбцов при разделении данных

    Можете ли вы прочитать обновленное mtime, но при чтении содержимого они еще не обновлены?

    выполнение rsync на нескольких машинах

    ssh-agent не работает должным образом

    Могу ли я заставить vim менять поведение своего курсора?

    Хотите извлечь часть имени файла до 5-го _?

    mysqld останавливается сразу после запуска из-за поврежденных таблиц (полный диск + перезагрузка оборудования) – как его исправить?

    Linux и Unix - лучшая ОС в мире.