在目录中,对于ls -1 .
按照默认顺序列出的每个文件(字典顺序),我想执行以下操作
找到从文件开始并包含该文件的下一个n
文件,将它们放入名为train
的数组中,并将它们复制到子目录tmp
中。
找到n+1
个文件,将其放入名为test
的变量
在train
,test
和tmp
上执行某些操作。删除tmp
。
train
和test
会被重复使用,并且应该为ls
列出的每个文件覆盖。
tmp
列出的每个文件开始执行上述步骤之前, ls
应为空。
除了n
列出的最后ls
个文件外,每个文件都执行了三个步骤,因为从每个文件开始都没有n+1
个文件。
我想知道如何在bash中实现上述功能?感谢。
例如,
假设n
为2,当前目录中ls
列出的文件为:
a
b
c
d
e
f
对于a
,我会找到a
和b
并将它们放入数组train
并将其复制到目录tmp
中,并找到{{1}并将其放在变量c
中。然后在test
,train
和test
上执行一些操作。最后,空目录tmp
。
对于tmp
,我会找到b
和b
,并通过覆盖它们将它们放入数组c
,然后将它们复制到目录train
中,并找到tmp
并将其覆盖在变量d
中。然后在test
,train
和test
上执行一些操作。最后,空目录tmp
。
然后,上述内容在tmp
和c
上执行,但不会在d
和e
上执行,因为f
= 2。
答案 0 :(得分:1)
这是一个实际上没有复制或删除任何内容的例子,
#!/bin/bash
n=3
files=( $(ls -1) ) # Store list of files in array variable "files"
limit=$(( ${#files[*]} - $n - 1 )) # All but last n+1 files.
echo mkdir -pv tmp
for i in $(seq 0 $limit)
do
j=$(( $i + $n )) # I put the index in a separate variable for clarity.
test=${files[$j]}
train=(${files[@]:$i:$n})
echo cp -v ${train[*]} tmp/
echo do_something $test, ${train[*]}, tmp/
echo rm -vf tmp/*
done
引用...