在bash中移动目录中的一半文件

时间:2016-03-21 09:14:48

标签: bash file

我试图从目录中删除几个文件:

/images
01.png
02.png
03.png
...

我想在另一个目录中修改一半:

for file in *.png
do
  mv ?
done

所以我有:

/imagesProcessed
01.png
03.png
....

有什么想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:4)

每个奇数:

mv {01..99..2}.png imagesProcessed

最后一个文件是99.png(或更低 - 然后你会看到一些错误但会起作用)。

每个其他文件,如果按字母顺序排序:

IFS='
'
mv `ls *.png | sed -n 1~2p` imagesProcessed

随机文件:

IFS='
'
mv `ls *.png | sort -R | sed -n 1~2p` imagesProcessed

编辑:更改内部字段分隔符,以便在名称中包含空格时可以正常工作

答案 1 :(得分:2)

如果文件不是太多:

files=(*.png)
half_num_files=$((${#files[@]} / 2))
mv "${files[@]:0:half_num_files}" imagesProcessed

这是做什么的?

  • files=( *.png )将所有匹配的文件名存储在名为files的数组中。
  • ${#files[@]}是此数组的长度,即文件数。所以$((${#files[@]} / 2))使用算术替换来获得一半。
  • ${arr[@]:a:b}从索引a开始扩展为子数组,长度为b。所以,${arr[@]:0:half_num_files}是数组的前半部分。