【发布时间】:2021-08-20 15:57:25
【问题描述】:
我有一个包含数以万计不同文件类型的文件夹。我想将它们全部复制到一个新文件夹(Copy1),但也将它们全部重命名为 $RANDOM 但保持扩展名不变。我意识到我可以写一行来指定要查找的扩展名以及如何命名它,但是必须有一种方法可以动态地执行此操作,因为至少有 100 种文件类型,并且将来可能会更多。
到目前为止,我有以下内容:
find ./ -name '*.*' -type f -exec bash -c 'cp "$1" "${1/\/123_//_$RANDOM}"' -- {} \;
但这会将随机数放在扩展名之后,并且会将所有内容放在同一个文件夹中。我不知道如何做以下两件事:
1 - 保持所有路径不变,但在新的根文件夹中 (Copy1)
2 - 如何将名称设为 $RANDOM.extension,而不是 .extension.$RANDOM
PS - $RANDOM 我的意思是实际随机生成的数字。我对保持文件夹结构很感兴趣,所以我们每个目录最多处理几百个文件,但所有目录/文件都需要重命名为 $RANDOM。另一种看待我需要做的事情的方式。将所有内容或 Folder1 以及所有子目录和文件复制到 Folder2(其中 Fodler2 是 $RANDOM 名称),然后将所有文件夹和文件重命名为随机名称,但保留所有扩展名。
编辑:好的,我想出了如何重命名和保留扩展名。但是我有一个问题,它将所有文件转储到运行脚本的根目录中。如何将它们保存在各自的文件夹中?我使用的命令是:
find ./ -name '*.*' -type f -exec bash -c 'mv "$1" $RANDOM.${1##*.}' -- {} \;
谢谢!
【问题讨论】:
-
随机是一个 15 位整数 (0-32k)。您将遇到冲突,并且对于“数万”个文件,您很可能会完全用完随机数。
-
你需要处理嵌套文件夹吗?
-
好吧,我保留文件夹结构,每个文件夹不超过一百个文件,所以不应该有任何冲突。基本上结果应该像这个原始文件夹一样,子文件夹和文件未受影响。以根目录创建新文件夹,复制原始文件夹的整个目录结构和文件。但是每个文件和文件夹都被重命名为随机数字或字母(没关系)。
-
我认为如果您检查并更新您的问题,您可能会得到更好的答案...首先您说您有
a folder,然后您开始谈论多个子文件夹 - 哪个?然后你说你有成千上万的文件类型,然后at least 100- 哪个?如何向我们展示一些文件名和一些结构以及它应该如何结束? -
只是好奇:用随机数替换文件名有什么意义?我很难想象一个我想要的用例。根据给定的正则表达式替换模式重命名文件,好的,但完全丢弃文件名?