2011-11-20 4 views
6

bash 스크립트에 도움이 필요합니다. 스크립트는 디렉토리의 모든 파일의 이름을 md5 sum + extension으로 바꿔야합니다.파일 이름을 md5 sum + extension (BASH)으로 바꿉니다.

아래의 bash 스크립트를 찾았지만 확장자를 추가 할 수 있도록 변경해야합니다.

md5sum * | sed 's/^\(\w*\)\s*\(.*\)/\2 \1/' | while read LINE; do mv $LINE; done 

답변

12

이 당신을 위해 작동 될 수 있습니다

# mkdir temp && cd temp && touch file.{a..e} 
# ls 
file.a file.b file.c file.d file.e 
# md5sum * | sed -e 's/\([^ ]*\) \(.*\(\..*\)\)$/mv -v \2 \1\3/' | sh 
`file.a' -> `d41d8cd98f00b204e9800998ecf8427e.a' 
`file.b' -> `d41d8cd98f00b204e9800998ecf8427e.b' 
`file.c' -> `d41d8cd98f00b204e9800998ecf8427e.c' 
`file.d' -> `d41d8cd98f00b204e9800998ecf8427e.d' 
`file.e' -> `d41d8cd98f00b204e9800998ecf8427e.e' 

또는 GNU SED는 심지어 짧은 수행 할 수 있습니다

# md5sum * | sed -e 's/\([^ ]*\) \(.*\(\..*\)\)$/mv -v \2 \1\3/e' 
+2

Apple/OSX 버전은 다음과 같습니다 :'md5 * | $ \ mv -v "\ 1 \ 2"\ 3 \ 2 sed -e 's/MD5 \ ([^.] * \) \ (. [^)] * \))/'| sh' – fnl

10

내가이 길 갈 것 : 첫 번째 기간 이후, 예를 들어, 모든 것을 얻을 수

for F in $DIR/*.*; do 
    mv "$F" "$(md5sum "$F" | cut -d' ' -f1).${F##*.}"; 
done 

사용 ${F#*.}tar.gz 대신 gz는 (귀하의 요구 사항에 따라 다름)이 같은

+0

OSX :'$ DIR에 F에 대한 /*.*; mv "$ F" "$ (md5"$ F "| cut -d"-f4). $ {F ## *.} "; done' –

0
find . -type f -exec mv \{\} "`md5sum \{\} | sed 's/ .*//'`.`echo \{\} | awk -v FS='.' '{print $NF}'\" 

또는 뭔가 :-) 할 것입니다. 사실, 이름에 .이없는 파일에서는 실패하므로 find 명령의 파일 이름에 필터를 추가하는 것이 좋습니다.

HTH