Как обрезать имя файла из нескольких файлов в папке

У меня есть папка с кучей файлов изображений png. Мне нужно обрезать имена файлов, чтобы удалить некоторую информацию с конца.

Например

some file-170227-222746.png some other file-170228-222742.png another file-170226-222743.png 

Мне нужно удалить все после – сохраняя расширение .png, чтобы в итоге:

 some file.png some other file.png another file.png 

Все файлы представляют собой файлы изображений png, и мне не нужно сохранять исходные файлы.

Я пробовал это, что работает, но делает не то, что он удаляет расширение .png

 for file in *.png; do mv -- "$file" "$(file%%.png" done 

Может ли предыдущая команда mv быть переделана, чтобы делать то, что мне нужно? Должен ли я использовать другой метод?

благодаря

3 Solutions collect form web for “Как обрезать имя файла из нескольких файлов в папке”

Ваш подход на правильном пути просто нуждается в некоторой точности. Вы можете сделать это:

 for file in ./*.png; do mv "$file" "${file%%-*}.png"; done 

Если у вас есть доступ к rename скриптов perl, вы также можете использовать

 rename -n 's/(.*).{14}(\.png)/$1$2/' * 

Удалите -n после тестирования, чтобы фактически переименовать файлы.

Заметки

  • -n печатать, что будет изменено, на самом деле ничего не делать
  • s/old/new заменить old на new
  • (.*) сохранить любые символы в этой позиции для последующего
  • .{14} ровно 14 символов
  • (\.png) сохранить .png
  • $1$2 печатать первый сохраненный шаблон и второй сохраненный шаблон

Спасибо всем за помощь.

Лучшее решение у меня есть:

 for file in ./*.png; do mv "$file" "${file%%-17*}.png"; done 

Обратите внимание на -17. Это позволяет избежать проблем с обрезкой файлов, когда у них есть ранняя тире перед областью, которую мне нужно обрезать.

Например

 some file-name-170227-222746.png 

Урезано до:

 some file-name.png 

Вместо:

 some file.png 
  • Как выполнить mv эквивалент да | cp -rf в каталогах?
  • Что произойдет, если случайно переместить мягкую ссылку, а затем «/»?
  • Как сортировать файлы в подпапку на основе части имени файла?
  • Я случайно скопировал часть каталога / * to / some /, как мне исправить мою ошибку?
  • Перемещение уникальных файлов из папки с дубликатами файлов
  • Пакетное переименование файлов с восходящим числом
  • Удаление номеров из имен файлов
  • Пакетное переименование папок с помощью одной команды bash
  • cp переписывание без перезаписи жестких ссылок на место назначения
  • Усечение имен папок после первого пробела
  • Переместить файлы в вложенных каталогах в папку dest, но сохранить basename и удалить структуру папок?
  • Interesting Posts

    Один вкладыш для заполнения колонок (аналогично printf) вывода из предыдущей команды трубы?

    Интерпретировать интерполированную переменную как литеральную строку в регулярном выражении Perl

    Смена окон i3 с разделенной структурой

    Как выбрать главы учебных пособий в Uemacs

    удаление элемента запуска из com.apple.launchd

    Плохое разрешение на втором мониторе Fedora 24

    Как я могу обновить пакет рекурсивно в Arch Linux?

    Не удается прочитать прежнюю внутреннюю файловую систему hdd через usb (конфликт имен группы томов fedora)

    Нормально ли, что переменная LD_LIBRARY_PATH отсутствует в среде?

    Что означает высокая нагрузка с пустым верхним значением?

    Превращение старого компьютера в сетевой брандмауэр

    Скопировать выделение в буфер обмена в tmux

    Нет EOF, когда программа считывает собственный исполняемый файл на cifs mount

    Почему пакеты в официальном репо часто очень устарели?

    dhclient-exit-hooks не выполнялся с NetworkManager

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