unix 从每个子目录复制一个文件(随机选择)?

68bkxrlz  于 2023-03-18  发布在  Unix
关注(0)|答案(2)|浏览(119)

我有一个嵌套的目录结构,最底层是.jpg文件的文件夹。我想从这个结构中的每个子目录(有数千个)中取出一个.jpg文件。我该怎么做?
我可以复制所有文件,但不能只复制其中的一部分。

pengsaosao

pengsaosao1#

从许多子目录中的每个子目录中获取一个随机文件:

find . -type d -links 2 -exec /bin/bash -c '
  dest=$1 ; shift
  for dir ; do
    cp "$( shuf -en1 "$dir"/*.jpg )" "$dest"
  done
' _ "$dest" {} +
  • find . -type d -links 2搜索没有子目录的目录
  • 这些目录被传递给bashshell,后者使用shuf从每个目录中选取一个jpg并将其复制到目标文件夹
prdp8dxp

prdp8dxp2#

只要你的文件和目录名不包含换行符,类似这样的东西(未经测试)就可以工作:

find . -type f -name '*.jpg' -print |
    shuf |
    awk '{dir=$0; sub("/[^/]+$","",dir)} !seen[dir]++' |
    xargs -I {} cp {} /some/directory

相关问题