2014-10-02 7 views
0

Пошел с учебниками, но не может понять, как использовать.sed regex заменить часть имени файла

Есть 100s файлов через вложенные папки, которые, как необходимость «ABCxxx.ext» переименовать в «XYZxxx.ext»

Где ххх являются строками альфа различно Numberic и .ext любого продления (XML, Java, XLS)

Я могу использовать:

find . -iname "ABC*.*" 

в терминале для просмотра этих файлов, но не уверен, что СЭД или другой команды, чтобы использовать для переименования файлов. На Mac 10.9.4

Примеры: "Abc01k.xls" ==> "Xyz01k.xls" "Abcloans.xml" ==> "Xyzloans.xml" "AbcThreads.java" ==> «XyzThreads .java "

Итак, если в названии файла есть символы Abc, замените его на Xyz. Может быть первыми символами или внутри.

Read: https://www.gnu.org/software/sed/manual/sed.html https://apple.stackexchange.com/questions/131164/how-to-tag-files-with-finder-tags-using-parts-of-a-file-name

https://apple.stackexchange.com/questions/75114/any-easy-way-to-search-for-replace-characters-in-jpg-file-names-in-a-folder

Последние 1 работает на 1 папку, но я хочу, чтобы посетить все папки.

Баш скрипт:

for i in Abc*; do 
     mv "$i" "${i/Abc/Xyz}" 
done 

Как я могу назвать этот скрипт для всех вложенных папок? Или как сделать то же самое с sed?

ответ

2

Вы можете попробовать это:

var1=`find . -type f -iname '*ABC*'` 
for i in $var1; do mv "$i" "`echo $i | sed 's/ABC/ZXC/g'`"; done 

Это будет переименовать файлы в подкаталогах, и изменить «ABC» в «ZXC» даже в середине файла.

+0

я положить ли, что в сценарии и вызвать с Баш или ш? Или прямо вставить в терминал? – tgkprog

+0

Вы можете выполнить его в скрипте или вызвать его в терминале. Это две линии. Вы можете сделать это, добавив «;» после первой команды –

+0

Не работает, если изменяется регистр ABC. во всяком случае, чтобы сказать sed, чтобы быть случайным? попытался ... sed 's/Tfw/Ddt/gI'' "; возникла ошибка. Ваш скрипт в файле, 2 строки – tgkprog

1

Вы можете использовать эту команду: find

find . -iname "ABC*.*" -exec bash -c 'f="$1"; mv "$f" "${f/Abc/Xyz}"' - {} \; 
+0

+1 Это тоже сработало, но не чувствительно к регистру. Как и sed, так как хотите узнать эту команду. – tgkprog

+1

Для случая с игнорированием сопоставьте 'shopt -s nocasematch' и' shopt -s nocaseglob' перед этим 'find', чтобы он игнорировал регистр. – anubhava

Смежные вопросы