В терминале, использующем цикл for, мы можем добавить часть до или после имени файла. Но если мы хотим удалить его, как мы это сделаем? Например, мы можем добавить .old после всех имен файлов .txt, используя команду ниже
$for i in *.txt
>do
> mv $i $i.old
> done
Но мой вопрос в том, как удалить этот .old только с использованием той же методики?
Как говорится в этом веб-сайте ... вы можете попробовать bash String Manipulations
Вы можете использовать два разных «оператора» внутри параметров (фигурные скобки), это bash String Manipulations и% операторов для обрезки шаблонов с начала или конца строки.
Ваш случай может быть:
$ {variable% pattern} Обрезать кратчайшее совпадение с концаВ терминале будет:
for i in *.old
do
mv $i ${i%\.*}
done
Здесь приведены примеры:
%
$ {variable% pattern} Обрезать кратчайшее совпадение с конца
Мы можем использовать следующие выражения: path = $ {foo% / *} Чтобы получить: /tmp/my.dir (например, dirname) file = $ {foo ## * /} Чтобы получить: filename.tar.gz (например, basename) base = $ {file %%. *} Чтобы получить: filename ext = $ {file # *.} Чтобы получить: tar.gz [ ! d13]Мы можем использовать эти выражения:
Обрезать кратчайшее совпадение с концаpath = $ {foo% / *}
Trim самое длинное совпадение с началаЧтобы получить: /tmp/my.dir (например, dirname)
Обрежьте самое длинное совпадение m endfile = $ {foo ## * /}
Обрезать кратчайшее совпадение с началаfoo = / tmp / my.dir / filename.tar.gz