我有一大串像这样名字的有序文件(视频)。
S1-E18-(Date)-(Title)-(Random numbers).mp4下面是列表的示例
S1-E1-20100526-title-of-video-1400316375.mp4
S1-E3-20100547-title-of-video-15457547.mp4
S10-E5-20100463-title-of-video-14467457.mp4在这种情况下,很容易看到文件S1-E2和S10-E4丢失了。但如果我有一个大名单,那我怎么找到丢失的文件。(离开季号S1, S2)只需查一查E的意思
最大的现有文件号是S50-E2184,最小的现有文件号是S1-E1
发布于 2018-11-22 07:32:49
使用awk:
$ awk -F- '{n = substr($2, 2)} (n - prev) != 1 {for (i = prev + 1; i < n; i++) print i} {prev = n}' input-file
2
4-F -将字段分隔符设置为- (因此S1、E1等成为不同的字段)。$2)中提取除第一个字符之外的所有内容,从而提取插集号(D10)。(n - prev) != 1),我们打印所有的数字在两者之间。prev中,以便进行下一次迭代。如果未对输出进行排序,则拆分提取并检查在以下两项中插入sort:
awk -F- '{print substr($2, 2)}' input-file | sort -n | awk '{n=$1} (n - prev) != 1 {for (i = prev + 1; i < n; i++) print i} {prev = n}'发布于 2018-11-22 08:09:30
更直接一点的剧本。脚本假定上一集存在并提取其集号。然后,它迭代和检查所有插曲之间的存在。注意,这不适用于以前导零编号的剧集。
#!/bin/bash
if [ -z "$1" ]; then
echo "please specify season prefix"
fi
# extract last episode number
last=`ls $1-*.* -1 --reverse | head -n 1 | grep --only-matching "E[[:digit:]+]" | cut -c 2-`
for ((i=1; i<=$last; i++)); do
if [ ! -f $1-E$i-*.* ]; then
echo "missing episode $i"
fi
done脚本使用季节前缀作为其第一个参数,即S1
https://askubuntu.com/questions/1094741
复制相似问题