我有一个包含成千上万种不同文件类型的文件夹。我想将它们全部复制到一个新文件夹(Copy1),但也将它们全部重命名为$ RANDOM,但保留扩展名不变。我意识到我可以写一行指定要查找的扩展名和命名方式,但是必须有一种动态地进行扩展的方法,因为至少有100种文件类型,将来可能还会更多。
到目前为止,我有以下内容:
find ./ -name '*.*' -type f -exec bash -c 'cp "$1" "${1/\/123_//_$RANDOM}"' -- {} \;
Run Code Online (Sandbox Code Playgroud)
但这会将随机数放在扩展名之后,并且还将所有数字都放在同一文件夹中。我不知道如何做以下两件事:
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##*.}' -- {} \;
Run Code Online (Sandbox Code Playgroud)
谢谢!
这是我想出的:
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
Run Code Online (Sandbox Code Playgroud)
我必须为随机 (i) 添加一个计数器,否则,如果扩展名相似,您的文件在复制时会覆盖自身。
在您的新文件夹中,您的文件应如下所示:
whatever1.txt
whatever2.txt
etc etc
Run Code Online (Sandbox Code Playgroud)
我希望这就是您正在寻找的。
| 归档时间: |
|
| 查看次数: |
1585 次 |
| 最近记录: |