将一些文件从源目录 A 复制到目录 B,并将一些文件非连续地复制到目录 C

将一些文件从源目录 A 复制到目录 B,并将一些文件非连续地复制到目录 C

我正在寻找一个脚本,以非连续的顺序将文件从源目录复制到两个目标目录。

例如,我想将一些文件从源目录复制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

相关内容