2014-02-06 5 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

유닉스 및 리눅스 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 

당신은 * 전에 .를 추가해야합니다.