2013-08-19 1 views
0

디렉토리 이름의 일부분을 기반으로 디렉토리의 파일 이름을 바꾸고 싶습니다. 나는 다음과 같은 구조를 가지고있다 :zsh을 사용하여 디렉토리 이름의 일부분을 기반으로 파일 이름 바꾸기

Sample_1234/all_R2.gz 
Sample_2345/all_R2.gz 
Sample_3456/all_R2.gz 

나는 여러 개의 다른 파일들의 연결로부터 새로운 파일을 생성한다. 그런 다음 디렉토리 이름의 번호 부분 만 사용하여 새 연결 파일의 이름을 지정하려고합니다. 예를 들어,

Sample_1234/1234_R2.gz 
Sample_2345/2345_R2.gz 
Sample_3456/3456_R2.gz 

는 내가 함께 할 디렉토리 이름의 부분을 반환 할 수 있습니다

pwd | grep -o '[0-9][0-9][0-9][0-9]' 

을하지만 zmv 사용하여 새 파일 이름이 점을 얻을 수 없습니다입니다. zsh 셸에서 어떤 제안? 감사,

답변

2

find을 사용하지 마십시오. zmv을 사용하십시오. () 쌍을 사용하여 원하는 파일 이름 비트를 가져오고 ${1}, ${2} 등을 참조하십시오. assuming you've got it loaded,

$ ls **/* 
Sample_1234/all_R2.gz Sample_4567/all_R2.gz 
Sample_2345/all_R2.gz Sample_6890/all_R2.gz 

Sample_1234: 
all_R2.gz 

Sample_2345: 
all_R2.gz 

Sample_4567: 
all_R2.gz 

Sample_6890: 
all_R2.gz 

그리고 여기 zmv입니다 : 여기 내 폴더 구조의

$ zmv -n 'Sample_(*)/all_R2.gz' 'Sample_${1}/${1}_R2.gz' 
mv -- Sample_1234/all_R2.gz Sample_1234/1234_R2.gz 
mv -- Sample_2345/all_R2.gz Sample_2345/2345_R2.gz 
mv -- Sample_4567/all_R2.gz Sample_4567/4567_R2.gz 
mv -- Sample_6890/all_R2.gz Sample_6890/6890_R2.gz 

그것은 우리가 숫자를 참조 할 수 있습니다 현재 디렉토리에서 파일 이름 _/ 사이에있는 모든 잡고 디렉토리 이름 끝에 문자열. 그 다음 참조로 ${1}을 사용하여 파일 이름에 다시 삽입합니다 (all 대체).

zmv -n을 사용하기 전에 어떤 일이 일어나는지 살펴 보는 것이 좋습니다.

+0

답변 해 주셔서 감사합니다. 나는 지금까지 어떤 이유로 든 보지 못했습니다. 여전히 도움이됩니다. – user1148636