shell 在大型数据集中循环遍历子目录,创建一个新的子目录名文件夹,然后将所选文件硬链接到该新目录

j13ufse2  于 2023-01-17  发布在  Shell
关注(0)|答案(1)|浏览(180)

我非常努力地想得到一个嵌套的for循环来处理这个问题,我正在处理的数据集非常大(略多于一百万个文件)。
我正在寻找一个嵌套的for循环,但它似乎不稳定。

count=0
for dir in $(find "$sourceDir" -mindepth 1 -maxdepth 1 -type d)
do
        (
                mkdir -p "$destDir/$dir"
                for file in $(find . -type f)
                do
                        (
                        if [ $((count % 3)) -eq 2 ]
                        then
                                cp -prl "$file" $destDir/$dir
                        fi
                        ((count ++))
                        )
                done
        )
        ((count++))
done

^^这只是进入最后一个目录并找到第三个文件。我需要它进入每个目录并找到第三个文件
我曾想过将其分解为块,并运行多个脚本而不是一个脚本,以使其更具可伸缩性。

7xllpg7q

7xllpg7q1#

多亏了评论者,我才能想出答案!!我的输入是一个有4个子文件夹的文件夹,在这4个子文件夹中,每个子文件夹都有12个文件。
我理想的输出是将每个第三个文件(从三个开始)硬链接到外部位置,并在它们的子目录中排序......所以类似于以下内容- subdirA(第三个文件硬链接,第六个文件硬链接,第九个文件硬链接,第十二个文件硬链接)subdirB(第三个文件硬链接,第六个文件硬链接,......)
......等等!!
以下是它的工作原理:

#!/bin/bash

for d in *;
do
        echo $d
        mkdir Desktop/testjan16/$d

#### loops through each file in the folder and hardlinks every third file (starting w 3) to the appropriate directory 

        for f in `find ./$d -type f | sort | awk 'NR %3 == 0'`; do ln $f Desktop/testjan16/$d; done
done

相关问题