我有两个目录,我们称它们为X和是 其中我有 100k+ 文件,.jpg 文件X和 .txt 文件是
我想随机选择氮文件来自X并复制到文件夹Z
这应该可以使用 find + shuffle 来管理。
然后我想找到其中的所有文件是与复制到的文件同名Z,但它们是.txt文件并将它们复制到目录瓦
可视化:N 个文件X>>Z 相同的 N 个文件是>>瓦
我该怎么做呢?
答案1
#!/bin/bash
X=/path/to/X
Y=/path/to/Y
Z=/path/to/Z
mapfile -d '' -t files < <(find "$X" -type f -name '*.jpg' -print0 |
shuf -z -n 10 -)
for f in "${files[@]}"; do
echo cp "$f" "$Z"
bn=$(basename "$f" ".jpg")
echo cp "$Y/$bn.txt" "$Z"
done
该脚本未经测试,但应该执行您想要的操作。将X
、Y
和Z
变量设置为正确的值,然后运行它以查看它会做什么,根据需要进行调整,当它按要求工作时,echo
从两行中删除cp
。
$files
它的工作原理是首先使用目录中的 10 个随机 .jpg 文件名填充数组 ( ) $X
。它使用 NUL 作为文件名分隔符,因此适用于任何文件名,甚至包括空格、制表符和 shell 元字符等烦人的字符。
然后它迭代每个文件名以 1. 将它们复制到目录$Z
,2. 提取文件名的基本名称部分, 3. 将基本名称 +.txt
从目录复制$Y
到目录$Z
。
顺便说一句,这需要 bash 版本 4.4-alpha(2015 年末发布)或更高版本,因为那时该-d
选项被添加到mapfile
.