代码之家  ›  专栏  ›  技术社区  ›  h1_pr018032130

用随机字符串重命名Bash中的多个文件

  •  1
  • h1_pr018032130  · 技术社区  · 2 年前

    假设任意数量的文件具有随机名称和相同的文件扩展名(例如。, file1.txt , file2.txt...fileN.txt ).如何用一个随机字符串可靠地重命名它们?

    例如 file1.txt, file2.txt...fileN.txt asdfwefer.txt, jsdafjk.txt ... 或 any combination of letters from latin alphabet].txt

    2 回复  |  直到 2 年前
        1
  •  0
  •   jthill    2 年前

    我能想到的获取随机字母字符串的最快方法是

    head -c24 /dev/urandom | base64 | tr -dc a-zA-Z
    

    所以

    randomname() { head -c24 /dev/urandom | base64 | tr -dc a-zA-Z; }
    for f in file*.txt; do mv "$f" `randomname`.txt; done
    

    即使有一个巨大的清单,你发生碰撞的几率也在十亿分之一的范围内。在末尾添加一个序列号 randomname 的输出,这也消失了。

        2
  •  0
  •   JRichardsz    2 年前

    以下是算法步骤:

    • 迭代文件
    • 获取名称和分机名
    • 计算一个随机字符串
    • 使用mv命令重命名

    剧本嘘

    location=$1
    
    echo "before"
    find $location
    
    for full_file_name in $location/*.*
    do
        filename=$(basename -- "$full_file_name")
        extension="${filename##*.}"
        filename="${filename%.*}"
        new_name=$(cat /dev/urandom | tr -dc 'a-z' | fold -w 32 | head -n 1)
        echo "rename from: $filename.$extension to: $new_name.$extension"
        mv $full_file_name "$location/$new_name.$extension"
    done
    
    echo "after"
    find $location
    

    处决

    bash script.sh /tmp/workspace/input
    

    后果

    enter image description here