Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Как массово удалить скобки в названиях файлов

#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, удалив круглые скобки.

Комментариев нет:

Отправить комментарий