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

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

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

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

4
задан 22 September 2013 в 01:37

2 ответа

for i in *.txt; do mv $i ${i%%.txt}; done

Это простой цикл, как тот, который вы написали. Примечание, которое я использовал; вместо новых строк, чтобы я мог ввести его в одну строку. Единственная конструкция, которая является новой для вас, это $ {i %%. Txt}, что просто означает $ i, а все последующие знаки %% отсечены от конца $ i.

Хороший совет: если вы не уверены, что произойдет, попробуйте добавить echo перед фактической командой, чтобы увидеть точные команды, которые должны быть выполнены. Например :

for i in *.txt; do echo mv $i ${i%%.txt}; done 
0
ответ дан 22 September 2013 в 01:37

Как эта сеть говорит ... вы можете попробовать bash String Manipulations

Вы можете использовать два разных «оператора» внутри параметров (фигурные скобки), Это операторы # и % для обрезания шаблонов по началу или концу строки.

Ваш случай может быть следующим:

$ {variable% pattern} Обрезать самое короткое совпадение с конца

В терминале будет:

[ 110]

Здесь у вас есть примеры:

Дано:

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

Мы можем использовать следующие выражения:

path = $ {foo% / *}

Чтобы получить: /tmp/my.dir (как dirname)

file = $ {foo ## * /}

Чтобы получить: filename.tar.gz (как basename)

base = $ {file %%. *}

To get: filename

ext = $ {file # *.}

Получить: tar.gz


$ {variable% pattern}

Обрезать самое короткое совпадение с конца

$ {variable ## pattern}

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

$ {variable %% pattern}

Обрезать самое длинное совпадение с конца

$ {variable # pattern}

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

[ 1127] Надеюсь, это поможет с.

0
ответ дан 22 September 2013 в 01:37

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

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