我正在寻找一个脚本,以非连续的顺序将文件从源目录复制到两个目标目录。
例如,我想将一些文件从源目录复制A/
到目标目录B/
,并将剩余文件复制到目标目录。如果目录中的文件在目录和目录之间平均分配,C/
那也是理想的。A/
B/
C/
我有类似的东西:
$ tree A/ B/ C/
A/
├── file0
├── file1
├── file2
├── file3
├── file4
├── file5
├── file6
├── file7
├── file8
└── file9
B/
C/
我希望它是这样的:
$ tree A/ B/ C/
A/
├── file0
├── file1
├── file2
├── file3
├── file4
├── file5
├── file6
├── file7
├── file8
└── file9
B/
├── file1
├── file3
├── file5
├── file7
└── file9
C/
├── file0
├── file2
├── file4
├── file6
└── file8
答案1
此代码将复制一个文件并将B/
下一个文件复制到并重复,直到复制C/
所有文件:A/
for f in A/*; do
i=$((i+1))
o=$((i%2))
[[ "$o" -eq 0 ]] && cp -v -- "$f" B/ || cp -v -- "$f" C/
done
这是一个演示:
ubuntu@Lenovo:~/test$ mkdir A B C
ubuntu@Lenovo:~/test$ touch A/file{0..9}
ubuntu@Lenovo:~/test$ tree A/ B/ C/
A/
├── file0
├── file1
├── file2
├── file3
├── file4
├── file5
├── file6
├── file7
├── file8
└── file9
B/
C/
0 directories, 0 files
ubuntu@Lenovo:~/test$ for f in A/*; do
i=$((i+1))
o=$((i%2))
[[ "$o" -eq 0 ]] && cp -v -- "$f" B/ || cp -v -- "$f" C/
done
'A/file0' -> 'C/file0'
'A/file1' -> 'B/file1'
'A/file2' -> 'C/file2'
'A/file3' -> 'B/file3'
'A/file4' -> 'C/file4'
'A/file5' -> 'B/file5'
'A/file6' -> 'C/file6'
'A/file7' -> 'B/file7'
'A/file8' -> 'C/file8'
'A/file9' -> 'B/file9'
ubuntu@Lenovo:~/test$ tree A/ B/ C/
A/
├── file0
├── file1
├── file2
├── file3
├── file4
├── file5
├── file6
├── file7
├── file8
└── file9
B/
├── file1
├── file3
├── file5
├── file7
└── file9
C/
├── file0
├── file2
├── file4
├── file6
└── file8
0 directories, 5 files