Linux:从for中删除重复的字符串并剪切

时间:2019-01-02 19:02:16

标签: linux bash for-loop find

所以我有一个看起来像这样的文件结构:

  • 视频
    • abc.avi
    • party_2014.h264
    • test.avi
    • xxx.mkv

我需要为每个扩展名创建一个目录并将相应的文件移动到那里,这样看起来就这样

  • 视频
    • video-avi
      • abc.avi
      • test.avi
    • video-h264
      • party_2014.h264
    • video-mkv
      • xxx.mkv

到目前为止,我有以下代码:

for i in $(find video -name "*.*" -print)
    do cut -d'.' -f2 <<< "$i" | uniq -c;
done

这将返回重复的avi,因此uniq似乎不起作用,如何正确删除重复的内容?

1 个答案:

答案 0 :(得分:3)

这个简单的脚本可能对您有用:

#!/usr/bin/env bash    

shopt -s nullglob

dir=video
for file in "$dir"/*.*; do
    out=$dir/video-${file##*.}

    [[ -d $out ]] || mkdir -- "$out" || continue
    mv -- "$file" "$out"
done

您还可以指定扩展名:in "$dir"/*.{avi,mkv,h264}