如何递归地复制文件,重命名它们,但在Bash中保持相同的扩展名?

如何递归地复制文件,重命名它们,但在Bash中保持相同的扩展名?,bash,find,cp,Bash,Find,Cp,我有一个文件夹,里面有成千上万种不同的文件类型。我想将它们全部复制到一个新文件夹(Copy1),但也将它们全部重命名为$RANDOM,但保持扩展名不变。我意识到我可以写一行代码来指定要查找的扩展名以及如何命名它,但必须有一种方法可以动态地进行,因为至少有100种文件类型,将来可能还会有更多 到目前为止,我有以下几点: find ./ -name '*.*' -type f -exec bash -c 'cp "$1" "${1/\/123_//_$RANDOM}"' -- {} \; 但这会将

我有一个文件夹,里面有成千上万种不同的文件类型。我想将它们全部复制到一个新文件夹(Copy1),但也将它们全部重命名为$RANDOM,但保持扩展名不变。我意识到我可以写一行代码来指定要查找的扩展名以及如何命名它,但必须有一种方法可以动态地进行,因为至少有100种文件类型,将来可能还会有更多

到目前为止,我有以下几点:

find ./ -name '*.*' -type f -exec bash -c 'cp "$1" "${1/\/123_//_$RANDOM}"' -- {} \;
但这会将随机数放在扩展名之后,也会将all放在同一个文件夹中。我不知道如何做以下两件事:

1-保持所有路径完整,但位于新的根文件夹(Copy1)中

2-如何使名称为$RANDOM.extension,而不是.extension.$RANDOM

PS-我所说的$RANDOM是指实际随机生成的数字。我对保持文件夹结构很感兴趣,所以每个目录最多只能处理几百个文件,但所有目录/文件都需要重命名为$RANDOM。另一种看待我需要做什么的方式。将所有内容或文件夹1以及所有子目录和文件复制到Folder2(其中Fodler2是$RANDOM名称),然后将所有文件夹和文件重命名为RANDOM名称,但保留所有扩展名

编辑:好的,我知道了如何重命名和保留扩展名。但我有一个问题,它将所有文件转储到运行脚本的根目录中。如何将它们保存在各自的文件夹中?命令Im使用的是:

find ./ -name '*.*' -type f -exec bash -c 'mv "$1" $RANDOM.${1##*.}' -- {} \;
find ./ -name '*.*' -type f -exec bash -c 'mv "$1" $RANDOM.${1##*.}' -- {} \;

谢谢

以下是我的想法:

i=1
random="whatever"
find . -name "*.*" -type f | while read f
do
    newbase=${f/*./$random$i.} //added counter to filename
    cp $f /Path/Name/"$newbase"
    ((i++))
done
我必须为random(I)添加一个计数器,否则,如果扩展名相似,您的文件在复制时会覆盖自身

在新文件夹中,您的文件应如下所示:

whatever1.txt
whatever2.txt
etc etc
我希望这就是你想要的

好的,我想出了如何重命名和保留扩展名。但是我有一个 将所有文件转储到根目录时出现的问题 脚本从何处运行。如何将它们保存在各自的文件夹中 文件夹?命令Im使用的是:

find ./ -name '*.*' -type f -exec bash -c 'mv "$1" $RANDOM.${1##*.}' -- {} \;
find ./ -name '*.*' -type f -exec bash -c 'mv "$1" $RANDOM.${1##*.}' -- {} \;
将命令更改为:

PATH=/bin:/usr/bin find . -name '*.*' -type f -execdir bash -c 'mv "$1" $RANDOM.${1##*.}' -- {} \;

这是对我有效的命令

find . -name '*.pdf' -type f -exec bash -c 'echo "{}" && cp "$1" ./$RANDOM.${1##*.}' -- {} \;

Random是一个15位整数(0-32k)。你会有冲突,如果有“数万”个文件,你很可能会完全用完随机数。你需要处理嵌套文件夹吗?好吧,我保留文件夹结构,每个文件夹不超过100个文件,所以不应该有任何冲突。基本上,结果应该与原始文件夹类似,子文件夹和文件未被触及。作为根目录创建的新文件夹,复制了原始文件夹的整个目录结构和文件。然而,每个文件和文件夹都被重命名为随机数字或字母(没关系)。我想如果你检查并更新你的问题,你可能会得到更好的答案。。。首先你说你有一个文件夹,然后你开始谈论多个子文件夹-哪个?然后你说你有数以万计的文件类型,然后
至少有100个
-哪个?让我们看看一些文件名和一些结构,然后看看它应该如何结束?只是好奇:用随机数替换文件名有什么意义?我很难想象一个我想要的用例。根据给定的正则表达式替换模式重命名文件,好吧,但完全丢弃文件名?我在MacOS上这样做,当尝试使用该代码时,我从cp命令中得到错误,它不知道该怎么做,并为我提供了帮助文件。也就是$RANDOM,我指的是实际的随机值,不是单词。我相应地重新编辑了,如果下面的内容不起作用,那么我不知道该说什么…我只是在我的comp上试用了一下,效果很好。我会继续调查的。还是不行,你是用Linux来运行的吗?还是你在MacOS上?我不明白/Path/Name/bit的用途?它只需要是脚本所在的根目录。假设有一个文件夹,里面有一个folder1,folder1里面有10个文件。我需要sript复制根文件夹并将其命名为random,然后在其中复制folder1,但也将其命名为random,然后复制其中的所有文件,但将每个文件重命名为random,但保留扩展名。我想换一种方式来看这个问题。。。用一个随机名称将整个内容复制到一个新文件夹中,然后递归地将每个文件夹/文件的名称更改为随机值,怎么样?这将是相同的事情,只是在2个步骤,而不是1,你会重命名,同时复制。重申一下,文件/文件夹名称可以是任何名称,越随机越好!只要扩展名保持不变。请尝试将cp-R添加到copy命令,该命令将复制整个根目录,并且所有文件名都将更改为random。对于路径名,这是新目录的位置,所有内容都复制到其中。因此,如果您在主目录中,并且有一个名为randomFolder的空文件夹,那么您的cp命令将是->cp-R$f randomFolder/“$newbase”