我想知道这是否可能:
.mov
我的文件夹中有大量文件。我想知道是否可以将文件复制到单独的文件夹,但在新文件名中包含 md5sum,位于实际名称之后但文件扩展名之前。例如,如果其中一个文件被命名,johnnycash.mov
我希望它最终看起来像这样:
johnnycash_8cbda72b2ce62f4a69a0b454ccccbe4.mov
我是一个菜鸟,这种事情可能有点高于我的水平,但如果有人有任何可行的解决方案,我将不胜感激。
干杯!
答案1
这个问题最好分两步解决:
- 将文件复制到新文件夹
- 根据它们的 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