0

我编写了这个 bash 脚本来自动化查找丢失文件的过程:

echo "--|";
echo "  |";
read -p "  ->Enter the text file that contains the video files to look for: " fname
if [ ! -e "$fname" ]; then
        echo "  |";
        echo "--> The file $fname is not valid or doesn't exist";
else
        echo "  |";
        read -p "  ->File ready to be processed, enter the path where to look for the files: [/home/efeikuna/public_html/files/flv/]": path
        if [ ! -e "$path" ]; then
                path="/home/efeikuna/public_html/files/flv/";
        fi
                i=0
                for line in `cat $fname`;
                do
                        file=$path$line;
                        #echo "   |";
                        if [ ! -e $file ]; then
                                echo "   -> $i - $file => DOES NOT EXIST";
                        fi
                        i=$(expr $i + 1);
                        #if [ $i == 3 ]; then
                        #       break;
                        #fi
                done
fi

该脚本正在运行,但它需要更多功能,所以我希望您可以指导/指向正确的方式:

  • 我需要获取非现有文件的总数和现有文件的数量
  • 你推荐使用什么来检查文件的完整性(通常是flv文件和txt文件,但将来会是其他的)
  • 如果if [ ! -e $file ]输入,我怎样才能匹配$fname一个locate $fname只是看文件是否存在于其他地方?如果locate $fname返回true,则显示所在位置,如果不是,则继续。
  • 您建议使用什么来编写一个文件,其中它通过单独的方式指示现有和丢失的文件,例如:

    Found Files:
    ____________
       ---- asdasd.flv
       ---- asdasd1.flv
       ---- asdasd2.flv
       ---- asdasd3.flv
       ---- asdasd4.flv
    
    Missing Files:
    ____________
       ---- bsdasd.flv
       ---- bsdasd1.flv
       ---- bsdasd2.flv
       ---- bsdasd3.flv
       ---- bsdasd4.flv
    
  • 有什么可能的改进吗?

感谢和抱歉任何可能的误解

4

2 回答 2

1

md5sum(and sha1sum) 生成一个包含校验和的文件。只需解析md5sum -c针对包含校验和的文件运行的结果,即可查看有多少文件有效、无效或丢失。

于 2012-04-17T18:07:34.043 回答
1

.我需要获取非现有文件的总数和现有文件的数量 有了这个,我使用python而不是bash,实际上它可以用bash来完成,但它发现python为此目的更有效:

 #!/usr/bin/env python

 import os
 import sys

 def check_file(directory, filelist):
     is_file = []
     not_file = []
     with open(filelist) as f:
         for filename in f:
             fp = directory + '/' + filename.strip()
             print fp
             if os.path.isfile(fp): is_file.append(filename.strip())
             else: not_file.append(filename.strip())
     print "Number of file: %s" %(len(is_file))
     for item in is_file: print "----- %s" %(item)
     print "Number of non file: %s" %(len(not_file))
     for item in not_file: print "----- %s" %(item)

 if __name__ == '__main__':
     if len(sys.argv) < 3:
         print "Usage: %s [dir] [listfile]" %(sys.argv[0])
         sys.exit(2)
     directory = sys.argv[1]
     filelist  = sys.argv[2]
     check_file(directory, filelist)

你推荐使用什么来检查文件的完整性(通常是flv文件和txt文件,但将来会是其他的)

md5sum 是正确的方法,但是如果您有更多更大的文件,它可能会很慢。请改用inotify。使用 inotify,您将在文件更新时收到通知。

如果如果 [ !-e $file ] 输入,我怎样才能将 $fname 与 locate $fname 匹配只是为了查看文件是否存在于其他地方?如果 locate $fname 返回 true,则显示所在位置,如果不是,则继续。

这是另一种python方式:

for path, dirs, files in os.walk(directory):
     for f in [os.path.abspath(os.path.join(path, filename)) for filename in files]:
         fn = filename.split['/'][-1]
         if fn == file_you_want_to_search_for:
             print filename 

希望这有帮助。

于 2012-04-18T11:19:01.840 回答