用于从文件夹复制文件并将 md5sum 附加到新文件名的脚本

用于从文件夹复制文件并将 md5sum 附加到新文件名的脚本

我想知道这是否可能:

.mov我的文件夹中有大量文件。我想知道是否可以将文件复制到单独的文件夹,但在新文件名中包含 md5sum,位于实际名称之后但文件扩展名之前。例如,如果其中一个文件被命名,johnnycash.mov我希望它最终看起来像这样: johnnycash_8cbda72b2ce62f4a69a0b454ccccbe4.mov

我是一个菜鸟,这种事情可能有点高于我的水平,但如果有人有任何可行的解决方案,我将不胜感激。

干杯!

答案1

这个问题最好分两步解决:

  1. 将文件复制到新文件夹
  2. 根据它们的 md5sums 重命名它们

第 1 步很简单:

cp -r folder_with_movs new_folder

第 2 步需要编写一些脚本:

cd new_folder
for i in *.mov; do
    bn="${i%.*}"
    ext="${i##*.}"
    md5=$(md5sum "$i" | awk '{ print $1 }')
    mv -v "$i" "${bn}_${md5}.${ext}"
done

答案2

由于只有扩展名“.mov”,这比捕获所有可能的扩展名更容易:

for file in *.mov; do
 SUM=$(md5sum "$file" | awk '{print $1}')
 cp "$file" <destination>/$(echo "$file" | sed -e "s/.mov/_${SUM}.mov/")
done

对所有 mov 文件进行循环。

计算 md5sum,仅从输出中获取第一列(这个 awk 语句总是派上用场,现在您已经看到它了)

将文件复制到新的目标,同时进行一些重命名:sed 将后缀“.mov”与字符串“_”交换,然后交换 md5sum,然后扩展名“.mov”,因此它将被保留。

注意文件名中的空格(最好避免它们)。

答案3

类似的东西可能会起作用。它非常粗糙,但会用文件名上的 md5sum 移动你的东西..

#!/bin/bash

CURRENTDIRECTORY=xxx
NEWDIRECTORY=xxx

for i in `ls $CURRENTDIRECTORY`; do
    if [ -f $i ]; then
        md5=`md5sum $i | awk '{print $1}'`
        name=$md5-$i
        cp $i $NEWDIRECTORY/$name
    fi
done

相关内容