7

bashスクリプトについてサポートが必要です。スクリプトは、ディレクトリ内のすべてのファイルの名前をmd5sum+拡張子に変更する必要があります。

以下のbashスクリプトを見つけましたが、拡張機能を追加するように変更する必要があります。

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

3 に答える 3

16

私はこのルートに行きます:

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

たとえば(要件によって異なります)の代わりに${F#*.}、最初の期間の後にすべてを取得するために使用しますtar.gzgz

于 2011-11-20T13:20:09.110 に答える
16

これはあなたのために働くかもしれません:

# 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'

または、GNUsedはそれをさらに短くすることができます。

# md5sum * | sed -e 's/\([^ ]*\) \(.*\(\..*\)\)$/mv -v \2 \1\3/e'
于 2011-11-20T20:56:06.197 に答える
0
find . -type f -exec mv \{\} "`md5sum \{\} | sed 's/ .*//'`.`echo \{\} | awk -v FS='.' '{print $NF}'\" 

またはこのような何かが行います:-)。実際には、名前にが含まれていないファイルでは失敗するため、findコマンドのファイル名にフィルターを追加することをお勧めします.

HTH

于 2011-11-20T13:24:06.970 に答える