我有一个包含数万种不同文件类型的文件夹。我想将它们全部复制到一个新文件夹(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。另一种看待我需要做什么的方法。将包含所有子目录和文件的所有内容或Folder1复制到Folder2(其中Fodler2是$ RANDOM名称),然后将所有文件夹和文件重命名为随机名称,但保留所有扩展名。
编辑:好的,我想出了如何重命名和保持扩展。但我有一个问题,它将所有文件转储到运行脚本的根目录。如何将它们保存在各自的文件夹中?我使用的命令是:
find ./ -name '*.*' -type f -exec bash -c 'mv "$1" $RANDOM.${1##*.}' -- {} \;
谢谢!
答案 0 :(得分:0)
这是我想出的:
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
我希望这就是你要找的东西。
答案 1 :(得分:0)
好的,我想出了如何重命名和保持扩展。但我有一个 将所有文件转储到根目录的问题 从哪里运行脚本。我如何将它们保持在各自的位置 文件夹?我使用的命令是:
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##*.}' -- {} \;
答案 2 :(得分:0)
这是对我有用的命令。
find . -name '*.pdf' -type f -exec bash -c 'echo "{}" && cp "$1" ./$RANDOM.${1##*.}' -- {} \;