+ -
当前位置:首页 → 问答吧 → 如何批量移动同一类型的文件

如何批量移动同一类型的文件

时间:2010-05-01

来源:互联网

我想写一个功能,和这个py实现的一样(这段代码是用来写自动变幻的背景的,但是不知道为什么,我无法成功执行这段代码提示如此: 没有那个文件或目录)
引用:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Name: slidexml.py
# Author: EthanZ6174
# Email: <[email protected]>
# Site: http://www.noslog.com
# Licence: GPLv3
# Version: 091127

import glob, os
import shutil
import time


curdir = os.getcwd()
os.chdir(curdir)
currentFilelist = glob.glob('*.*')
currentImageFiles = glob.glob('*.jpg')

currentTime = time.localtime()
length = len(currentImageFiles)

for i in currentFilelist:
if i == 'backgroundslide.xml':
os.remove(i)

f = file('backgroundslide.xml', 'w')

f.write('<background>\n')
f.write('\t<starttime>\n')
f.write('\t\t<year>' + str(currentTime.tm_year) + '</year>\n')
f.write('\t\t<month>' + str(currentTime.tm_mon) + '</month>\n')
f.write('\t\t<day>' + str(currentTime.tm_mday) + '</day>\n')
f.write('\t\t<hour>' + str(currentTime.tm_hour) + '</hour>\n')
f.write('\t\t<minute>' + str(currentTime.tm_min) + '</minute>\n')
f.write('\t\t<second>' + str(currentTime.tm_sec) + '</second>\n')
f.write('\t</starttime>\n')
f.write('<!--This animation will start at the time it created-->\n')

for i in currentImageFiles:
length = length - 1

f.write('\t<static>\n')
f.write('\t\t<duration>595.0</duration>\n')
f.write('\t\t<file>' + curdir + '/' + currentImageFiles[length] +'</file>\n')
f.write('\t</static>\n')
if length >= 1:
f.write('\t<transition>\n')
f.write('\t\t<duration>5.0</duration>\n')
f.write('\t\t<from>' + curdir + '/' + currentImageFiles[length] + '</from>\n')
f.write('\t\t<to>' + curdir + '/' + currentFilelist[length - 1] + '</to>\n')
f.write('\t</transition>\n')

f.write('</background>\n')
f.close()

我已经查到声明一个数组的方法
引用:
shell是支持数组使用的,目前只能支持一维数组,但参数个数没有限制。

1、申明一个数组

declare -a array

其实不用申明,按数组方式直接赋值给变量即可,bash 就知道那是数组



2、数组赋值

a)array=( var1 var2 var3 ... varN )

b)array=( [0]=var1 [1]=var2 [2]=var3 ... [n]=varN )

c)array[0]=var1 array[1]=var2 array[3]=var3 ... array[n]=varN



3、引用数组

echo ${ array[n] }

n为数组的序号,从0开始



4、计算数组元素个数

${ #array[@] } 或者 ${ #array[*] }

bash的特殊参数 @ 和 * 都表示“扩展位置参数,从1开始”,但形式上稍有差异,但在数组里使用好像是可以通用的。



5、遍历数组

方法一:for循环

for var in ${ array[@] };

do

echo $var

done
但是我不知道怎么读取当前目录的文件并且写入数组。希望高人指点一下。

作者: ghostry   发布时间: 2010-05-01

没人理我没办法,研究了一下 py的语句,改了一下,总算能用了,这程序真郁闷,空格都计较
代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Name: slidexml.py
# Author: EthanZ6174
# Email: <[email protected]>
# Site: http://www.noslog.com
# Licence: GPLv3
# Version: 091127

import glob, os
import shutil
import time


curdir = os.getcwd()
os.chdir(curdir)
currentFilelist = glob.glob('*.*')
currentImageFiles = glob.glob('*.jpg')

currentTime = time.localtime()
length = len(currentImageFiles)

for i in currentFilelist:
if i == 'backgroundslide.xml':
  os.remove(i)

f = file('backgroundslide.xml', 'w')

f.write('<background>\n')
f.write('\t<starttime>\n')
f.write('\t\t<year>' + str(currentTime.tm_year) + '</year>\n')
f.write('\t\t<month>' + str(currentTime.tm_mon) + '</month>\n')
f.write('\t\t<day>' + str(currentTime.tm_mday) + '</day>\n')
f.write('\t\t<hour>' + str(currentTime.tm_hour) + '</hour>\n')
f.write('\t\t<minute>' + str(currentTime.tm_min) + '</minute>\n')
f.write('\t\t<second>' + str(currentTime.tm_sec) + '</second>\n')
f.write('\t</starttime>\n')
f.write('<!--This animation will start at the time it created-->\n')

for i in currentImageFiles:
length = length - 1
print length
#print curdir
#print currentImageFiles[1]
f.write('\t<static>\n')
f.write('\t\t<duration>595.0</duration>\n')
f.write('\t\t<file>' + curdir + '/' + currentImageFiles[length] +'</file>\n')
f.write('\t</static>\n')
f.write('\t<transition>\n')
f.write('\t\t<duration>5.0</duration>\n')
f.write('\t\t<from>' + curdir + '/' + currentImageFiles[length] + '</from>\n')
if length >= 1:
  f.write('\t\t<to>' + curdir + '/' + currentImageFiles[length-1] + '</to>\n')
if length <1:
  f.write('\t\t<to>' + curdir + '/' + currentImageFiles[len(currentImageFiles)-1] + '</to>\n')
f.write('\t</transition>\n')

f.write('</background>\n')
f.close()

作者: ghostry   发布时间: 2010-05-05

代码:
#!/bin/bash
#本脚本有以下功能:读取当前目录的文件列表并且写入数组
selfname=`basename $0`   #获得脚本自身文件名
x=0         #数组索引初始
for filename in *;
do         #循环当前目录下的文件
   if [ "$selfname" = "$filename" ];then
      continue   #本文件跳过
   else
      array[$x]=$filename   #文件名给数组索引为x的元素
      let "x+=1"      #改变索引指针,步长1
   fi
done
echo ${array[@]}   #打印数组,以便检查程序运行情况

作者: trigger   发布时间: 2010-05-12

牛人终于出现啦

作者: ghostry   发布时间: 2010-05-12

雖然過了這麼久,不過我還是要告訴你一個最最簡潔的寫法:
arr=(/home/*) #列出/home下的所有文件並賦值給數組arr
echo ${arr[@]} #打印出數組arr的所有元素

簡單就是美...

作者: 潛龍勿用   发布时间: 2011-09-22