我需要从每个子文件夹递归地复制10个文件/图像。

/dir1
-- /subdir1
-- -- file1
-- -- fileN
-- /subdir2
-- -- file1
-- -- fileN
-- /subdir3
-- -- file1
-- -- fileN
-- /subdirN
-- -- file1
-- -- fileN
...

结果应该是:
/newdir1
-- /subdir1
-- -- file1
-- -- file10
-- /subdir2
-- -- file1
-- -- file10
-- /subdir3
-- -- file1
-- -- file10
-- /subdirN
-- -- file1
-- -- file10
...

目录结构应该相同,但每个文件夹中每个原始文件夹最多应有10个随机文件。
如何使用shell脚本完成此操作?

最佳答案

我想您不想复制所有文件(这是cp -r命令建议的),而只复制n个文件。
假设我们有一个名为foo的目录,需要将n=10文件从每个子目录移动到名为bar的特定位置。所以,shell脚本循环将如下所示。

#!/bin/bash

for subdir in $(find ~/foo -type d); do
  subdir_relative=$(echo $subdir | sed 's:.*foo/::g')
  mkdir "$subdir_relative"
  for file in $(find "$subdir" -type f | head -n 10); do
    cp "$file" "~/bar/$subdir_relative/"
  done
done

关于linux - Linux-如何从每个文件夹复制递归N个文件并保持相同的文件夹结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40085308/

10-11 06:32
查看更多