通过迭代数组删除文件?

通过迭代数组删除文件?

我有两个包含文件号的数组,我需要读取这两个数组并删除这些文件。我需要读取数组并删除目录pri内的文件。/primary同样,我需要读取snd数组并删除/secondary目录内的文件。这两个目录还有很多其他文件和其他子目录,所以我需要非常小心。我只需要删除这两个数组中提到的文件。

所有文件名都是这样的:

abc_monthly_5_log.data
abc_monthly_25_log.data
abc_monthly_78_log.data

下面是我的脚本,我可以迭代它们并一一删除这些文件。还有其他更好的方法吗?

# it will lot of file numbers not just four or five files
pri=(0 5 7 100)
snd=(9 8 187 90 156)

# iterate pri array and delete files inside
for pm in "${pri[@]}"; do
    rm /primary/abc_monthly_"$pm"_log.data
done

# iterate snd array and delete files inside
for sm in "${snd[@]}"; do
    rm /secondary/abc_monthly_"$sm"_log.data
done

答案1

一种“更好”的方法,即执行rm次数较少的“更好”方法,是使用xargs

{
    for pm in "${pri[@]}"; do
        printf '/primary/abc_monthly_%s_log.data\n' "$pm"
    done

    for sm in "${snd[@]}"; do
        printf '/secondary/abc_monthly_%s_log.data\n' "$sm"
    done
} | xargs rm

这将使用循环作为生成路径名的手段。然后将这些路径名传递给该路径名,该路径名将同时xargs rm执行尽可能多的路径名。rm使用您提供的示例数组,它可能会运行rm 一次

我上面编写的方式假设所有路径组件都不包含文字换行符或空格(在本例中它们不这样做)。

相关内容