我需要一些bash腳本的幫助。腳本需要將目錄中的所有文件重命名爲其md5 sum +擴展名。將文件重命名爲md5 sum + extension(BASH)
我已經找到了下面的bash腳本,但它需要更改,以便它將添加擴展名。
md5sum * | sed 's/^\(\w*\)\s*\(.*\)/\2 \1/' | while read LINE; do mv $LINE; done
我需要一些bash腳本的幫助。腳本需要將目錄中的所有文件重命名爲其md5 sum +擴展名。將文件重命名爲md5 sum + extension(BASH)
我已經找到了下面的bash腳本,但它需要更改,以便它將添加擴展名。
md5sum * | sed 's/^\(\w*\)\s*\(.*\)/\2 \1/' | while read LINE; do mv $LINE; done
這可能會爲你工作:
# 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'
我會走這條路:
for F in $DIR/*.*; do
mv "$F" "$(md5sum "$F" | cut -d' ' -f1).${F##*.}";
done
使用${F#*.}
把一切先內後外,例如tar.gz
代替gz
(取決於您的要求)
OSX:'適用於F在$ DIR /*.*; do mv「$ F」「$(md5」$ F「| cut -d''-f4)。$ {F ## *。}」;完成' –
find . -type f -exec mv \{\} "`md5sum \{\} | sed 's/ .*//'`.`echo \{\} | awk -v FS='.' '{print $NF}'\"
或者這樣的事情會做:-)。實際上,我建議爲find命令的文件名添加一個過濾器,因爲它將在名稱中沒有.
的文件上失敗。
HTH
Apple/OSX版本是:'md5 * | sed -e's/MD5(\([^。] * \)\(。[^)] * \))= \(。* \)$/mv -v「\ 1 \ 2」\ 3 \ 2 /'| sh' – fnl