Как пакетно переименовать файлы, удалив специальный символ без использования переименования в оболочке Linux
2030
chenyi1976
Например, у меня есть 100 файлов и их имена имеют пустое пространство. Одним из них является " The Monkey King Return (2015).mkv".
Как убрать все пробелы в имени и заменить их символом точки, а также убрать "(" и ")"?
Результат должен быть " The.Monkey.King.Return.2015.mkv".
как я могу сделать это в партии?
На самом деле я запускаю сценарий оболочки на моем Synology NAS через ssh, который является дистрибутивом BusyBox Linux с установленными bash и ash, без gcc. Уже пытался в течение нескольких дней, не могу понять это должным образом.
Доступные инструменты: mv / xargs / sed / awk / другие стандартные linux cmd.
А как насчет рекурсивного переименования подпапок?
Редактировать: только что установил apt-get и переименовал cmd в мою синологию nas с помощью Debian Chroot с https://synocommunity.com/, так что теперь все в порядке.
Чтобы сделать человека, которому нужен простой ответ, cmd:
find . -iname \*\ \*.\*|rename 's/\ /\./g'
Возможный дубликат [Как переименовать файлы с пробелами с использованием оболочки Linux?] (Http://superuser.com/questions/295994/how-do-i-rename-files-with-spaces-using-the-linux- ракушка)
Anthony Geoghegan 8 лет назад
3
3 ответа на вопрос
2
Sjon
If you don't have the rename command, you can do this with a little shell scripting which busybox's ash also seems to support (this is recursive):
find -type f -name \*.mkv | while read f; do n=$ # replace spaces n=$ # remove opening bracket n=$ # remove closing bracket mv -v "$f" "$n" done
Please note that will break if the folder-names also contain spaces or brackets.
1
Sjon
Most linux distro's include util-linux which gives you the rename command. You can do what you request by running these commands:
These are explained in the manual; type man find or man rename to read them.
Beware that some distro's apparently include a different command which accepts perl regular expressions. If yours does too, you'll need a slightly different syntax:
Осторожно! По крайней мере, если ваш совпадает с моим, `rename` принимает регулярное выражение, а в регулярном выражении` .` соответствует * любому * отдельному символу.
a CVn 8 лет назад
0
Ну, у меня нет, и man-страница подтверждает это, предоставляя следующий пример: `rename .htm .html * .htm`. Но я добавлю предупреждение, спасибо
Sjon 8 лет назад
0
Я на самом деле запускаю сценарий оболочки на моем Synology NAS через ssh, который, к сожалению, не имеет команды «переименовать», возможно ли это сделать с помощью команды mv?
chenyi1976 8 лет назад
0
@ chenyi1976 у тебя установлен bash? Перечислите свои ограничения в своем вопросе
Sjon 8 лет назад
0
Обновленный билет, это дистрибутив BusyBox Linux с bash и ash, без gcc.
chenyi1976 8 лет назад
0
@ Одна вещь, которую я обнаружил, это то, что система, подобная synology, на самом деле использует синтаксис sed: "rename 's / \ /\./g' * .mkv"
chenyi1976 8 лет назад
0
0
ScriptKitty37
Я долго искал решение этой проблемы. Я работаю на старых закрытых системах, в которых не могут быть установлены новые пакеты. У меня нет renameкоманды. Наконец я написал скрипт, который работает со всеми введенными на клавиатуре специальными символами:~@#$%^&*()-_=+[]{}\|;:",<.>?'
Скрипт переименует каждый файл и каталог в текущем каталоге. Он заменит все специальные символы, кроме -_.с _характером. outfile=Линия может быть изменена, чтобы использовать другой символ для замены в случае необходимости. Замените |_|на, |.|чтобы использовать .символ например.