复制bash中以浮点数命名的目录范围

时间:2018-08-21 16:48:34

标签: arrays bash copy range directory

我有数千个用于存储某些文件的文件夹,并且(这些文件夹)以以下方式命名:

0.01
0.02
.
.
.
1.01
.
.
.

通常,我会使用cp -r {1..1000} some/destination,但是尝试执行cp -r {0.01..0.21} some/destination无效。

还可以,如果我只想复制第五个文件夹吗?

0.05
0.1
0.15
.
.
.

再一次,文件将位于数组中,并以特定的数字结尾,例如1.2

2 个答案:

答案 0 :(得分:1)

使用seq命令:

  

seq [OPTION]... FIRST INCREMENT LAST

     

-f, --format=FORMAT使用printf样式的浮点数FORMAT

     

来源:man seq

因此,所有文件夹:

cp -r $(seq 0.01 0.01 0.21) some/destination

如果您只想复制第5个文件夹:

cp -r $(seq 0.05 0.05 0.21) some/destination

但是,此seq将创建一个文件夹名称列表,其名称类似于2.00。如果您不希望尾随零,则需要通过添加标志-f '%g'

将其重新格式化

答案 1 :(得分:1)

可能最好使用数组,这样就可以解决不遵循严格顺序的文件夹问题,尽管这不像每次cp时复制多个目录那样有效,就像{{ 3}}答案:

dirs=(*.*/)                       # get list of directories into an array
n=0
for dir in "${dirs[@]}"; do       # traverse the array
  (( ++n % 5 == 0 )) || continue  # skip if it is not the 5th
  cp -r -- "$dir" "$dest"         # copy!
done