Чтобы дать чуть более обобщенный c ответ:
искатель. sh:
#!/usr/bin/env bash
usage() {
echo 'Usage: ./finder.sh string_to_remove'
exit
}
if [ "$#" -ne 1 ]; then
usage
fi
check_string=$1
counter=0
for file in ./*
do
if [[ -f $file ]]; then
if [[ $file == *"$check_string"* ]]; then
mv -v "$file" `echo $file | sed "s/$check_string//"`
let "counter++"
fi
fi
done
if [ ! "$counter" -gt 0 ]; then
echo "No files found containing '$check_string'"
else
echo "$counter files effected with string '$check_string'"
fi
Затем вы можете использовать его с разными подстроками в следующим образом (после выполнения chmod +x finder.sh
):
./finder.sh any_string
# Removes 'any_string' from all filenames
Примеры:
Со следующим списком каталогов:
$ ls
AArse
AByfl
BArse
CCCAArse
XX
YY
вы можете запустить
./finder.sh rse; ./finder.sh yfl
, чтобы получить следующий вывод:
renamed './AArse' -> './AA'
renamed './BArse' -> './BA'
renamed './CCCAArse' -> './CCCAA'
3 files effected with string 'rse'
renamed './AByfl' -> './AB'
1 files effected with string 'yfl'
, чтобы ваш каталог теперь выглядел следующим образом:
AA
AB
BA
CCCAA
XX
YY
Конечно, вы можете захотеть встроить некоторые проверки на потенциальные перезаписывается при использовании команды mv
.