#shell
В папке много файлов с именами в виде цифр в круглых скобках: (123).txt (757823).txt Подскажите, как массово удалить круглые скобки из названий файлов? Чтобы стало: 123.txt 757823.txt
Ответы
Ответ 1
Пока как то длинно получилось, но вроде безопасно с точки зрения спецсимволов: find -name '(*).txt' -print | sed 's/$/\x0/;p;s/[()]//g' | tr -d '\n' | xargs -0 -n2 mv Внимание: перед выполненем в боевом режиме выполните команду с заменой mv на echo что бы проконтролировать какие аргументы будут переданы команде mv. В команде происходит следующее: find находит все подходящие файлы и печатает по одному на строку. sed дописывает 0-символ перед концом строки и печатет строку, после чего удаляет все скобки в имени и еще раз печатает строку (действие по умолчанию). После него tr удаляет переводы каретки. xargs выполняет заданную команду передавая попарно по 2 аргумента из входного потока, разделенные 0-символом. В этом режиме xargs гарантирует правильную передачу параметров с любыми спецсимволами (пробелами и кавычками)Ответ 2
#!/bin/bash for f1 in `find /temp -name '*'`; do f2=${f1/(/} f2=${f2/)/} echo "$f1 -> $f2" mv $f1 $f2 doneОтвет 3
Команда $ rename 's/[\(\)]//g' *.txt переименует все файлы .txt, удалив круглые скобки.
Комментариев нет:
Отправить комментарий