2012-12-01 3 views
0

저는 방금 Windows 8에서 왔으며 큰 문제가 있습니다. 우분투 12시 10 분에 지금 FileHistory를 사용하여 내 데이터를 외장 하드 드라이브에 백업했으며 파일 이름에 타임 스탬프를 추가하는 것 외에도 모든 파일이 백업되었습니다.괄호 안에 모든 문자 바꾸기

"(2012_"및 ")"로 시작하는 괄호 사이의 모든 것을 제거해야합니다.

아무도 도와 줄 수 있습니까? 여기에 내가 해결하기 위해 노력하고있어 파일 목록의 스크린 샷입니다 :

https://dl.dropbox.com/u/2526790/Screenshot%20from%202012-11-30%2021%3A19%3A06.png

어떤 도움을 크게 감상 할 수있다.

감사합니다,

+1

[무엇을 시도하셨습니까?] (http://whathaveyoutried.com) –

답변

0

어때?

래리 월 (Larry Wall)에게 감사드립니다.

0

한 가지 방법 : 위의 명령을 실행 한 후

$ (
> IFS="" 
> for i in * 
> do 
> mv "$i" $(echo $i | sed 's/\(.*\)(.*)\(.*\)/\1\2/') 
> done 
>) 

: 파일 이름 바꾸기

$ ls -l 
total 0 
-rw-r--r-- 1 guru None 0 Dec 1 09:14 a (2002).iso 
-rw-r--r-- 1 guru None 0 Dec 1 09:14 b_(2003_2).iso 

:

현재 파일

,352,932 10
0

당신은 이런 식으로 작업을 수행 할 수 있습니다 ${FILE%(*}이 (가) 오른쪽에서 (*의 작은 경기를 포함하여 마지막 여는 괄호 후, 즉 모든 것을 제거하기 때문에

for FILE in *; do 
    mv "$FILE" "${FILE%(*}${FILE##*)}" 
done 

이 작동, ${FILE##*)}*)의 가장 큰 경기를 제거하면서 왼쪽에서부터, 즉 마지막 닫는 괄호를 포함하여 모든 것. 그것들을 결합하면 마지막 괄호를 제외한 모든 것을 얻을 수 있습니다. 파일 이름에 다른 괄호가있는 경우에도 작동합니다.

참고로 이런 종류의 스크립트 이동은 힘들고 잠재적으로 파일 이름을 망칠 수 있습니다. 위의 mv 대신 echo을 사용하여 모든 단일 파일에 대해 실제로 올바른 작업을 수행하는지 확인하는 것이 좋습니다.

큰 따옴표는 파일 이름에 공백이 있기 때문에 중요합니다.

여는 괄호 앞의 최종 공간을 제거하려면 첫 번째 패턴에 포함 시키십시오 : ${FILE% (*}.

관련 문제