我试图从目录中删除几个文件:
/images
01.png
02.png
03.png
...
我想在另一个目录中修改一半:
for file in *.png
do
mv ?
done
所以我有:
/imagesProcessed
01.png
03.png
....
有什么想法吗?
提前致谢!
答案 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}
是数组的前半部分。