我编写了这个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
该脚本正在运行,但它需要更多功能,所以我在跳跃,你可以指导/指出我正确的方式:
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
有任何可能的改进吗?
感谢并抱歉任何可能的误解
答案 0 :(得分:1)
md5sum
(和sha1sum
)生成一个包含校验和的文件。只需针对包含校验和的文件解析运行md5sum -c
的结果,即可查看有效,无效或缺失的文件数。
答案 1 :(得分: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,您将在文件更新时收到通知。
若if [! -e $ file]进入,如何将$ fname与locate $ fname匹配,以查看该文件是否存在于其他地方?如果找到$ fname返回true,则显示where where where,如果不是,则继续。
这是另一种蟒蛇方式:
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
希望这有帮助。