Переименование скрипта на Synology NAS

770
Giorgos Tzortzatos

У меня есть Synology Nas, в котором есть много файлов с недопустимыми символами (Nas не предоставляет пользователям разрешения на доступ к файлу, если в имени есть такой символ), например, * . " / \ [ ] : ; | = ,мне удалось получить CLI на коробке, и мне было интересно, есть способ изменить имена файлов во всех общих папках или изменить оскорбительные символы с помощью _. Структура дерева файлов довольно глубокая.

0
Это не "недопустимые" символы. Хотя наличие косой черты в имени, которое не обозначает разделитель каталогов, должно быть представлено, например, для клиентов Unix как нечто иное. tripleee 6 лет назад 0

4 ответа на вопрос

0
Oo.oO

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

find / -name "*" -exec ~/bin/some_script_that_will_rename_files.sh {} \; 

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

Вопрос в том, есть ли у вас эти странные символы только внутри имен файлов или они также находятся в каталогах.

0
Mark Setchell

Посмотрите, сможете ли вы запустить на нем Perl:

perl -v 

Если он запускается, вы можете установить или посмотреть, renameзапускаются ли сценарии Perl и он может очень легко переименовать файлы. Пример:

touch "Freddy :;|=, Frog" # create file with mad name  rename --dry-run 's/[:;|=,]/_/g' *Frog # see what it would become 'Freddy :;|=, Frog' would be renamed to 'Freddy _____ Frog' 

Я сделал несколько других примеров - смотрите здесь .


Если вы не можете использовать rename, то вы можете использовать что-то вроде этого, но, пожалуйста, сначала протестируйте его на некоторых копиях нескольких файлов и сделайте резервную копию перед запуском.

Здесь я просто тестирую файлы GIF, поэтому я не делаю беспорядок. Кроме того, я на самом деле ничего не делаю, я просто вывожу то, что я буду делать:

find . -iname "*gif" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); echo "mv {} $new"' \; 

Если это выглядит правильно, вам нужно выполнить следующую команду:

find . -iname "*gif" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; 

что немного отличается, потому что нет, echoи мне нужно заключить в кавычки параметры mv.

К сожалению, perl rename отсутствует в системе. Команда `mv` присутствует. Есть ли способ объединить команды `find` и` mv` для выполнения этой работы? Giorgos Tzortzatos 6 лет назад 0
0
Giorgos Tzortzatos

Большое спасибо Марку Сетчеллу и mko за их помощь. Я закончил со следующими командами

find . -iname "*:*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*<*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*>*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*|*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*?*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*[*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*]*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; find . -iname "*\*" -exec bash -c 'new=$(tr ";:|" "___" <<< "{}"); mv "{}" "$new"' \; 
0
seppe peeters

'brename' - это бинарный файл Go, который выполняет тяжелую работу.
потратил много времени, пытаясь найти решение в bash (синология nas это busybox, ubuntu is dash в настоящее время) regexing.
https://github.com/shenwei356/brename

у него есть бинарные файлы для linux 64-bit (в зависимости от возраста вашего nas).

SSH в ваш NAS, Wget скачать двоичный файл, по ссылке. взломать

./brename -d -R -p ":" -r "" / volume1 / share_name
(удалить -d --dry-run)

более длинный ответ:
(откройте терминал оболочки)
$ ssh admin @ nas_ip_adress_or_dns_name [вы можете позже $ sudo su root с паролем администратора] $ wget https://github.com/shenwei356/brename/releases/download/v2.7.0/ brename_linux_amd64.tar.gz
$ tar -xvzf brename (нажмите tab для автозаполнения),
затем
$ ./brename -R -p ":" -r "" / volume1 / share_name
add --dry-run, чтобы сначала увидеть эффект без изменений. строка выше заменяет все ":" на пробел.

Пожалуйста, [отредактируйте] этот ответ, чтобы следовать рекомендациям по программному обеспечению, предоставленным [здесь] (https://meta.superuser.com/a/5330/911683). Worthwelle 5 лет назад 0

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