Удалить часть имени файла, используя для цикла в терминале

В терминале, использующем цикл for, мы можем добавить часть до или после имени файла. Но если мы хотим удалить его, как мы это сделаем? Например, мы можем добавить .old после всех имен файлов .txt, используя команду ниже

$for i in *.txt
>do
>    mv $i $i.old
>    done

Но мой вопрос в том, как удалить этот .old только с использованием той же методики?

1
задан 22 September 2013 в 02:37

1 ответ

Как говорится в этом веб-сайте ... вы можете попробовать 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 end

file = $ {foo ## * /}

Обрезать кратчайшее совпадение с начала

foo = / tmp / my.dir / filename.tar.gz

1
ответ дан 24 May 2018 в 17:43

Другие вопросы по тегам:

Похожие вопросы: