2010-09-07 2 views
0

У меня есть каталог с именами файлов, как «абы c.jpg», «Защита 0.jpg», «Gh I.jpg»Баша сценариев - выборочно обрабатывать имена файлов с пробелами

Мне нужен сценарий для есть все файлы, заканчивающиеся «0.jpg», чтобы стать « _0.jpg»

Так, в приведенном выше примере второй файл должен стать «де f_0.jpg»

ответ

1

инструмент rename может быть что вам нужно.

+0

Это часть MySQL, поэтому она не может быть установлена. Кроме того, он работает с содержимым, а не с именами файлов. –

+0

О, мужчина, это опечатка. 'rename', а не' replace'. – tdammers

5

Я думаю, что ваш вопрос должен прочитать, что вы хотите, чтобы файлы, заканчивающиеся на «0.jpg», стали «_0.jpg» (обратите внимание на пробел в первых кавычках). Это имеет смысл с вашим примером.

for i in *\ 0.jpg ; do 
    mv -- "$i" "${i/ 0.jpg/_0.jpg}" 
done 

То есть, для каждого файла по шаблону "* 0.jpg", переименуйте его замена "0.jpg" с "_0.jpg"

Edit: Для дополнительной безопасности, рассмотреть возможность использования -n (no-clobber) или -i (интерактивный) в качестве опции mv(1).

+1

Хорошее решение, +1. Возможно, вы захотите написать 'mv -" $ i "' для защиты имен файлов, начинающихся с тире. – Philipp

+0

Хорошая точка. Поскольку мы используем bash, у нас, вероятно, есть GNU mv. Добавлен. – camh

+0

привет, пожалуйста, объясните, какую технику вы используете здесь? Я не понимаю. "$ {i/0.jpg/_0.jpg}" –

-3
ls -1 | grep .jpg | awk -F "." '{print $1 "_0." $2}' 
+0

Это заслуживает по крайней мере трех downvotes. Никогда не используйте 'ls' в скриптах, никогда не используйте' grep' для соответствия именам файлов, не используйте внешние инструменты, если есть более простое встроенное решение. – Philipp

+0

Это хуже, чем это: это на самом деле ничего не переименовывает, оно просто печатает список новых имен. И он не заменяет «0» на «_0», он * добавляет * «_0». И он делает это для всех файлов .jpg, а не только для тех, которые заканчиваются на «0.jpg». И если у любого из имен файлов есть дополнительные символы периода, они становятся еще глупее. –