2013-08-01 3 views
2
나는 현재 등등
file.2003-01-02.txt 
file.2003-01-04.txt 

파일을 날짜순으로 배치 이름을 바꾸는 방법은 무엇입니까?

라는 이름의 ...되어 몇 백 파일의 이름을 변경하는 데 사용할 수있는 명령은 무엇

? 나는 그들의 이름은 싶습니다 :

file_y2003m01d02.txt 
file_y2003m01d04.txt 

... 즉 등

, file.2007-12-09.txtfile_y2007m12d09이 될 것입니다. 이 작업을 수행하는 간단한 명령 집합이 있습니까?

마찬가지로 파일에 file_y2003m02d01_grid.txt이라는 다른 문제가 있습니다. 각 파일 이름에서 _grid을 제거하여 위에서 제안한 형식과 일치시키는 방법을 알고 싶습니다.

답변

3

당신은 rename 명령을 사용할 수 있습니다

rename 's/^file\.([0-9]{4})-([0-9]{2})-([0-9]{2})\.txt$/file_y$1m$2d$3.txt/' * 

이 파일 이름을 변환하는 Perl regular expression substitution을 사용합니다. 캡처 된 () 그룹 [0-9]{4} 다음 (숫자, 4 회), - 다음, (그렇지 않으면 모든 문자와 일치, 이스케이프 한 .) file.^을 시작하는 파일을 찾기

  1. : 위의 명령은 말한다 , 다른 포착 된 그룹의 숫자 두번 등, 그리고 끝나는 $.txt;

  2. 나서 등 제 포착 기 $2, 다음과 .txt 끝나는, m이어서 제 포착 기 $1, 다음 file_y 해당 파일의 이름을 변경.

당신은 또한 당신이 어떤 방법 rename 작품에 대한 지식과, 두 번째 문제를 해결하기 위해 같은 명령을 사용하는 방법을 작동 할 수 있어야한다.

0

또한 나오지도 사용할 수 있습니다 : 예를 들어

:

ls | while read f; do echo "mv $f $(echo $f | sed 's/\./_y/;s/-/m/;s/-/d/')"; done 

이 당신에게 실행 비난 명령을 보여줍니다. 실제로 이동하려면 에코와 따옴표를 제거하십시오.

ls | while read f; do mv $f $(echo $f | sed 's/\./_y/;s/-/m/;s/-/d/'); done 
관련 문제