2014-02-06 3 views
1

У меня есть несколько файлов с этим форматомзамещающие имена файлов, которые содержат (а)

a file (www.something.com) 

, и я хочу, чтобы удалить (www.something.com) рекурсивно. Я ожидаю, что

rename 's/\(*\)//' a\ file\ \(www.something.com\) 

должен выполнить эту работу, но это не так! Зачем? Тогда я хочу, чтобы сделать это рекурсивно, как этот

find . -name '*\(*\)' -exec bash -c 'mv $0 ${0/\(*\)/}' {} \; 
+0

Принадлежит Unix и Linux stackexchange –

ответ

1

Это должно работать:

s='a file (www.something.com)' 
touch "$s" 
ls "a file"* 
a file (www.something.com) 

# renane command 
rename 's/ [^ ]*$//' "$s" 

ls "a file"* 
a file 

Сделать рекурсивный используя поиск:

find . -name '*\(*\)' -exec rename 's/ [^ ]*$//' '{}' \; 

или иначе без переименования:

find . -name '*\(*\)' -exec bash -c 'mv "$1" "$(sed "s/ [^ ]*$//"<<<"$1")"' - '{}' \; 
+0

Я вложил результаты выше в мой ответ, чтобы вы могли это увидеть. Был ли ваш файл ввода назван как «файл (www.something.com)» ИЛИ что-то еще? – anubhava

+0

@mahmood: Даже это переименование отлично работает: 'rename '/ [^] * $ //' a \ file \ \ (www.something.com \)' – anubhava

+0

Вы используете BASH или что-то еще? Я буду копаться в этом – mahmood

2

Вы должны сказать:

rename 's/\(.*\)//' filename 

Вам нужно добавить . перед тем *.

Смежные вопросы