2009-03-13 3 views
1

동일한 디렉토리에있는 일부 파일의 이름을 변경하고 싶습니다. 사용 된 파일 이름 패턴은 유럽 날짜 형식의 Prefix_ddmmyy.tex입니다. 가독성과 순서를 위해서 나는 표준 날짜 형식으로 패턴 Prefix_yymmdd.tex의 파일 이름을 바꾸고 싶습니다.셸에서 날짜 기반 파일의 이름을 바꾸는 방법은 무엇입니까?

전체 디렉토리에 대해 자동으로이 작업을 수행 할 수있는 사람이 있습니까? 내 sed 및 regexp 지식은 매우 날카로운 아니지만 ...

+0

것을 "미국"날짜 형식 was mmddyy. – innaM

+0

예, 미국인은 mmddyy입니다. yymmdd (또는 yyyymmdd)는 표준 형식입니다 (특히 다른 형식과 달리 실제로 적절하게 정렬됩니다). – vladr

+0

좋습니다. 오류가 발생했습니다. 표준 변형을 가져 가겠습니다. 그에 따라 편집 됨. – boutta

답변

3

접두사 _ *. tex; 할 file_new = echo "$file" | sed -e 's:\([0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\)\(\.tex\):\3\2\1\4:' 테스트 "$ 파일"! = "$ file_new"& & MV -f "$ 파일" "당신이 파일을 많이 가지고 및/또는 원하는 경우" 가

또는를 수행 $ file_new

for file in Prefix_*.tex ; do 

로 :

find . -name Prefix_*.tex -print | while read file ; do 

또는 (비 재귀, GNU) :

를 처리 교체, 재귀 적으로 파일
find . -maxtdepth 1 -name Prefix_*.tex -print | while read file ; do 
0

시도 할 수 있습니다 "mmv".

1
또한 외부 명령없이 본 쉘 형 쉘와 함께 할 수

:

for f in *.tex; do 
    _s=.${f##*.} _f=${f%.*} _p=${f%_*}_ 
    _dt=${_f#$_p} _d=${_dt%????} _m=${_dt%??} 
    _y=${_dt#$_m} _m=${_m#??} 
    mv -- "$f" "$_p$_y$_m$_d$_s" 
done 

zsh을로이 될 것이다 : 나는 항상 생각

autoload -U zmv 
zmv '(*_)(??)(??)(??)(.tex)' '$1$4$3$2$5' 
+0

블라드 (Vlad)의 솔루션을 이해하고 있지만 스크립트가 수행하는 작업을 설명 할 수 있습니까? 다른 변수의 바인딩을 이해하지 못합니다. – boutta