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

У меня есть папка с кучей файлов изображений 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` возможность создавать каталоги?
  • mv: не может статировать
  • переименование огромной папки: это рискованно?
  • Как удалить последнюю часть нескольких имен каталогов?
  • Невозможно перезаписать файл, перемещая его поверх него
  • Перемещение файлов по каталогам по критериям глубины
  • Добавление распакованных файлов в ZIP-папку
  • Переместить каждый файл, который не является каталогом
  • Переименовать скрипт bash - false нет такой ошибки файла или каталога
  • Усекать при необходимости при перемещении файла в файловую систему с более коротким NAME_MAX
  • Сделать rsync перемещать (не копировать) файлы в локальной файловой системе
  • Interesting Posts

    Как я могу открыть thunar, чтобы он выбирал конкретный файл?

    Почему в окнах я вижу папки и устройство, подключенные к сети, которые в debian я не вижу?

    Создание каталога ChrootDirectory, доступного для записи пользователем SFTP

    cURL не подключается к HTTPS, пока wget делает (ошибка NSS -12286)

    Не удается переключить макет с помощью Win + Space после включения дополнительных типографских символов

    увеличение логического объема

    Bash, вставить последний использованный аргумент текущей команды

    Как я могу указать прокси-сервер системы без указания пароля в виде открытого текста?

    найдите минимальное и максимальное значение в двух столбцах

    Linux Mint (LMDE) внезапно разбился и больше не загружается

    файл фильтра для определенной даты

    Как проверить переменную (модифицируемую) строку в Unix?

    Как сократить изображение на 30% в Unix?

    Автоматически открывать соединение с удаленным рабочим столом при входе в систему

    Почему все файлы обнаружены как приложение / октет-поток в nemo?

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