当前位置:Linux教程 - Shell - shell - 从一个目录中提取文件的问题

shell - 从一个目录中提取文件的问题

从一个目录中提取文件的问题
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.coM
地址:无名

请问在unix下怎样用shell实现从一个目录中,依次读取所有的文件。 再把这些文件压缩
成同一个文件。当文件太多时,可以按每1000个文件压缩成一个文件。
我的原意是这样的:例如有5631个文件,我可以压缩成1.Z, 2.Z, 3.Z, 4.Z, 5.Z, 既是
每一千个文件就压缩成一个Z文件。
因为当我想从这些文件找相应的数据时,我用到过grep 命令, 但grep每次只能查找一千
个文件。所以很不方便,而且我的文件有上万个,所以只好把它们都压缩成几个文件了。
我以前也遇到这个问题,比如rm 上万个文件,可能删不掉,需要分批删

未经测试,供参考
------------------------------------------------
#!/bin/ksh
COUNT=0
RUN=0
ls > filelist.tmp
while read file
do
echo $file >> 1000file.tmp
COUNT=` expr $COUNT + 1`
if [ `expr $COUNT % 1000` -eq 0 ]
while read single_file
do
mv $single_file ./tardir/
done << 1000file.tmp
RUN=`expr $RUN +1`
tar -cvf /archive.$RUN ./tardir
rm -r ./tardir/*
rm 1000file.tmp
fi
done < filelist.tmp
rm filelist.tmp
------------------------------------------------

巧妙的处理方法:

ls > /tmp/filelist
split -l1000 -a3 /tmp/filelist /tmp/splitlist
for i in /tmp/splitlist* ; do
tar cvf - -I $i | compress > $i.tar.Z && rm $i
done

(Solaris8 下通过测试)