Попытка изменить несколько расширений файлов

Возможно, использовать y // (встроенная команда tr в sed) вместо s /// :

$ echo clayii | sed -e '/clayii/ y/clayk/kieio/'
kieiii

Обратите внимание, что команда y // будет по-прежнему применяться ко всей строке, а не только к подходящее слово.

2
10.08.2018, 22:19
3 ответа

Добавление 1к именам всех файлов, имена которых изначально заканчивались на.foo:

find. -type f -name '*.foo' -exec mv -i {} {}1 ';'
0
27.01.2020, 22:09

Использование вами renameможет работать не везде. Другой способ добиться этого — использовать find, mvи некоторую замену bash.

find. -name '*.foo' -exec bash -c 'mv "$0" "${0%.foo}.foo1"' "{}" \;

Несколько замечаний:

Я использую -exec, а не -execdir. Последний эффективно cdуказывает на каталог совпадающего файла (, что не совсем то, что вам нужно, потому что тогда путь к файлу --, который будет относиться к .--, больше не будет правильным ). ]. Вам нужен только -exec, который будет запускать данную команду для каждого файла, соответствующего -name '*.foo'(, заменяя {}путем к совпавшему файлу ).

"${0%.foo}"удаляет расширение .foo, поэтому, если $0равно "hello.foo", тогда "${0%.foo}"заканчивается как "hello". Затем добавление .foo1в конец просто добавляет это, поэтому "${0%.foo}.foo1"равно "hello.foo1".

2
27.01.2020, 22:09

Используйте петлю for

for f in *.foo
do
    mv $f ${f/.foo/.foo1}
done
1
27.01.2020, 22:09

Теги

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