Как удалить строку в каждом имени файла

[root@localhost ~]# ls *.bak

test2.bak test3.bak test9.bak test.bak test.txt.bak

Как удалить все .bak во все файлы? Это моя текущая попытка

ls *.bak|xargs -t -i mv {}.bak {}

Но это не работает для меня. Есть ли там обходной путь?

5 Solutions collect form web for “Как удалить строку в каждом имени файла”

Используйте команду rename :

 rename 's/\.bak$//' *.bak 

  • 's/\.bak$//' – выражение perl для соответствия всем именам файлов, заканчивающимся на .bak и .bak расширение

Цикл должен делать (в POSIX-подобной оболочке):

 for f in *.bak; do mv -- "$f" "${f%.*}" done 

И как одна строка:

 for f in *.bak; do mv -- "$f" "${f%.*}"; done 

Что-то, что должно работать на всех платформах:

 for i in *.bak do mv $i `echo $i | sed 's/\.bak$//'` done 

В качестве ответа на вопрос РоманаПерехреста здесь я нахожу эту команду для меня.

 rename .bak '' *.bak 
 #!/bin/bash for val in \`ls *.bat` do mv $val `echo $val | cut -f1 -d'.'` done 
  • Странное поведение в команде mv - возможно, проблема с открытым вызовом sys?
  • Как переименовать неназванные файлы с соответствующими расширениями?
  • Удаление строк в именах файлов
  • Сценарий Bash для исправления имен файлов
  • Добавление метки времени в имя файла / dir
  • Переименуйте кучу файлов с определенным шаблоном
  • Как переместить все файлы плюс скрытые в папку вниз?
  • Как изменить суффикс файлов
  • Переименовать файлы для изменения знаков пунктуации и нумерации
  • Поворот файла
  • Как работают разрешения при перемещении каталогов?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.