Intereting Posts
Почему системе UNIX требуется столько дисков в / dev / * синхронизация двух почтовых отправлений Должен ли я заменить свой двоичный код системы PHP в / usr / bin самокомпилированным? Установка Dummynet на Linux Ubuntu Программа для съемки снимков фильма? Shell: проверьте, существует ли контейнер-докер Обработка абзацев в файлах unix gksu -S запрашивает пароль только один раз, даже если он настроен на три раза в конфигурации sudo максимальное значение матрицы Книга Samsung Ultra не просыпается после спящего режима и приостанавливает работу на Crunchbang Запустить программное обеспечение на Linux-машине из Windows: решение для графического интерфейса Пытаясь скопировать / вставить длинный скрипт с несколькими EOF, терминал начинает работать на полпути Использование цикла for для петли над несколькими массивами в bash команда status не распознает параметр `-p` в Ubuntu Ошибка Xen: «xl list» жалуется на libxl

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

[root@localhost ~]# ls *.bak

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

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

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

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

Используйте команду 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