У меня есть много файлов, у которых есть общий шаблон в их имени, который я бы хотел удалить. Например, у меня есть файлы "a_file000.tga" и "another_file000.tga". Я хотел бы сделать операцию над теми файлами, которые удалили бы шаблон "000" из их имен, в результате чего появились новые имена "a_file.tga" и "another_file.tga".
Как удалить определенные символы из имен файлов с помощью BASH
Ответ 1
Попробуйте это (это работает в обычном старом Bourne sh):
for i in *000.tga
do
mv "$i" "`echo $i | sed 's/000//'`"
done
Оба аргумента заключены в кавычки для поддержки пробелов в именах файлов.
Ответ 2
Bash может выполнять sed -подобные замены:
for file in *; do mv "${file}" "${file/000/}"; done
Ответ 3
Решение не bash, так как я знаю, что два быстрых плаката уже рассмотрели это:
Там есть прекрасная короткая программа perl под названием rename, которая по умолчанию установлена на некоторых системах (у других есть менее полезная программа переименования). Он позволяет использовать perl regex для вашего переименования, например:
rename 's/000//' *000*.tga
Ответ 4
#!/bin/bash
ls | while read name; do
echo mv $name ${name/$1//}
done