Мне нужно помогание здесь, получил движение проекта, где мы должны изменить файл и имена папок в рамках определенного каталога, чтобы удалить или заменить любого и все символы, которые считали бы недопустимыми в соответствии с Windows с несколькими дополнительными символами. Покиньте финал extnsion
ILLEGAL CHARACTERS:
< (less than) MAKE -
> (greater than) MAKE -
: (colon) MAKE -
" (double quote) REMOVE
/ (forward slash) MAKE -
\ (backslash) MAKE -
| (vertical bar or pipe) MAKE -
? (question mark) REMOVE
* (asterisk) REMOVE
ADDITIONAL CHARACTERS:
REMOVE '
REMOVE %
REMOVE #
REMOVE ^
REMOVE !@#$%^&()=+][{};,`~
Любой символ с "ДЕЛАЕТ -" рядом с ним, должен быть сделан - (дефис) вместо символа, например, файл по имени John\Sykes.doc должен стать John-Sykes.doc. Если символ отмечается, как "УДАЛЯЮТ" затем, он должен быть удален, и ничто не положено на, это - место, например, файл под названием John?Sykes.doc стал бы JohnSykes.doc
Это - довольно важный шаг в очень крупном проекте, у нас есть вход в нашу организацию, и я не смог создать сценарий к настоящему времени. Я знаю, как сделать простые версии, которые могут только изменить имена файлов на индивидуальной основе, но не могут сделать этого en масса. Например, я могу создать сценарий для удаления только из имен файлов, но я не знаю, как включать папки/каталоги, и при этом я не знаю, как включать все другие символы в этот сценарий.
Идеально сценарий работал бы в первый раз и произвел бы файл с помощью эха со всеми изменениями, которые должны быть внесены включая полный путь и затем измененный путь. Сценарий должен был бы затем или быть изменен немного для использования mv вместо этого, или он мог относиться к файлу, созданному с помощью эха, и выполнить все необходимые изменения с помощью него...
Любой и вся справка ценились бы, поскольку это действительно довольно важно, и я испытываю недостаток в навыках в данный момент для создания этого сам...
Заключительное примечание, я не могу использовать команду #rename. Это повреждает нашу политику IT.
Править
Я не могу использовать любую версию, переименовывают, глава моего отдела IT имеет, запретил его. Я уверен, что у него есть свои причины, но я не могу сказать, что я посвящен в них. Переименовать команда не доступна на наших серверах вообще.
Это означает, что я должен использовать чистый удар для выполнения операции.
Нет никаких дополнительных требований. В основном я должен смочь запустить скрипт для вывода всех изменений, которые будут внесены в файл, прежде чем что-либо будет изменено. Это позволит нам рассматривать результаты и удостоверяться, что нет никаких взлетов материала. После этого мы хотим выполнить (тот же сценарий или другой) его для фактического внесения изменений.
Все, в чем я нуждаюсь, является вышеизложенным, таким образом, что-либо отмеченное "ДЕЛАЕТ -", должен стать дефисом, и что-либо отмеченное "УСТРАНЯЮТ" необходимости просто уйти.
Если существует что-либо еще, спросите. Я счастливо дам дальнейший комментарий.
Создайте сценарий rename1.sh:
#! /bin/bash
old=$1
new=${old//[\''"?*%#^!@$&()=+[]{};,`~']}
new=${new//['<>:\|']/-} # I removed /, see below.
if [[ -e $new ]] ; then
if [[ $old != $new ]] ; then
echo Cannot rename "$old" to "$new" - target already exists.
fi
else
mv "$old" "$new"
fi
Это переименовывает один файл согласно данным правилам с помощью расширения параметра. Для переименования поддерева выполните его с find
:
find /path -exec rename1.sh {} \;
Вы уверены, что хотите заменить /
с -
? Это поместило бы все файлы в тот же каталог.