У меня есть много файлов, у которых есть общий шаблон в их имени, который я бы хотел удалить. Например, у меня есть файлы "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