首页 > 解决方案 > 使用 find 使用随机字符递归地重命名文件

问题描述

我有一个 IP 摄像机,它可以拍摄快照并将这些快照嵌套到多个目录中。子目录看起来像这样。

/cam_folder
   |--Date
   |----Hour
   |------Minute
   |-------->file1
   |-------->file2...etc
   |------Minute
   |-------->file1...etc

由于它存储文件的方式,存在大量子目录,因为它将这些快照放置在 Date/Hour 目录的 Minute 目录中。

无论如何,还有其他类型的文件混在一起,但我知道如何使用 find 来查找我需要的所有 .jpg:

find /cam_folder/ -type f -name '*.jpg'

但我需要做的是将所有 .jpg 文件重命名为随机字符。我能够在 bash 脚本中的单个目录中找到它:

for file in *.jpg; do
    new_file="$(mktemp XXXXXXXX.jpg)"
    mv -f -- "$file" "$new_file"
done

我的问题是如何将这些联系在一起?我猜我需要使用 find 将这些输入到 bash 脚本中?

有没有更简单的方法可以在我走的时候递归地重命名一个目录?

标签: linuxbashcommand-linescripting

解决方案


find /cam_folder/ -type f -name '*.jpg' -exec sh -c '
for f; do
  mv -f -- "$f" "${f%/*}/$(mktemp -u XXXXXXXX.jpg)"
done' _ {} +

查找
Shell 命令语言 § for 循环
Shell 命令语言 § 参数扩展


推荐阅读