很抱歉,如果这是一个基本问题,但我刚刚开始,我有点迷茫。我有一组约3千个文件,我想运行命令。不幸的是,命令来自的程序(morphadorner)一次只能运行8个文件。文件连续编号。如何让程序迭代每个第8个文件,以便它处理文件夹中的所有文件?
答案 0 :(得分:0)
假设您的文件名为file01
,file02
... file64
,您可以使用GNU Parallel
来处理这些文件:
parallel -j 1 -n 8 echo {1} {2} {3} {4} {5} {6} {7} {8} ::: file*
输出将是:
file001 file002 file003 file004 file005 file006 file007 file008
file009 file010 file011 file012 file013 file014 file015 file016
file017 file018 file019 file020 file021 file022 file023 file024
file025 file026 file027 file028 file029 file030 file031 file032
file033 file034 file035 file036 file037 file038 file039 file040
file041 file042 file043 file044 file045 file046 file047 file048
file049 file050 file051 file052 file053 file054 file055 file056
file057 file058 file059 file060 file061 file062 file063 file064
当然,我只是回应参数,你可能会调用morphadorner
。
-j 1
表示一次只运行一个morphadorner
- 如果你有8个CPU内核,你可能想省略这个并允许说8 morphadorners
一次运行。
-n 8
说消耗 8个参数/文件。
{1}
是第一个参数的占位符,{2}
是第二个参数的占位符等。
:::
是一个分隔符,告诉GNU Parallel
参数即将跟随。
答案 1 :(得分:0)
看一下这段代码:
files=(*)
count=${#files[@]}
limit=8
echo "Processing $count files: ${files[@]}"
while [ $count -gt 0 ] ; do
count=$((count-8))
[ $count -lt 0 ] && limit=$((limit+count)) && count=0
part=("${files[@]:$count:$limit}")
echo $count-$((count+limit)): "${part[@]}"
done