如何查看连续数字名称文件是否缺少某些文件?

如何查看连续数字名称文件是否缺少某些文件?

如果我给予ls -1我会得到这样的,

file_0001.jpeg
file_0002.jpeg
file_0003.jpeg
file_0004.jpeg
file_0005.jpeg
file_0006.jpeg
file_0007.jpeg
file_0008.jpeg
file_0009.jpeg
file_0010.jpeg
file_0011.jpeg
file_0012.jpeg
file_0013.jpeg
file_0014.jpeg
file_0015.jpeg
file_0016.jpeg
file_0017.jpeg
file_0018.jpeg
file_0019.jpeg
file_0020.jpeg
file_0021.jpeg
...
file_0999.jpeg

有没有一种方法可以使用awk或其他工具来查看在这种连续增量方式中是否丢失了某些文件。

答案1

如果您使用的是bashshell,则可以使用seqjot创建“完美”输出参考示例,然后将 的输出ls -1与该参考进行比较:

$ diff <(ls -1) <(seq -f 'file_%04g.jpeg' 999)

这不仅会显示任何丢失的文件,还会找到无关的文件。

答案2

虽然其他答案提供了准确找到的方法哪个文件丢失,原来的问题是看看一些可以通过更方便打字的方式检查文件是否丢失。

您的列表是 的输出ls -1,因此通过管道将其输入 wc 应该会为您提供许多与最后一个条目的名称相匹配的文件。

ls -1 | wc -l

如果计数与最后一个文件的名称匹配,一定有一个文件丢失。

答案3

您可以使用 awk 过滤掉丢失的内容。在 GNU Awk 上,通过支持多字符 FS,您可以将结果通过管道传输到

awk -F'[_.]' ' $2 != prev+1 { print "file "  prev+1 " missing" }{ prev = $2 }'

或者使用perl

perl -F'[_.]' -ane 'if ($F[1] != $prev+1) {printf "file %d missing\n",$prev+1}; $prev=$F[1]'

如果预计存在更多间隙,您可以awk打印出丢失的文件编号范围。修改以上内容

awk -F'[_.]' ' $2 != prev+1 { print "file(s) "  prev+1 "-" $2-1 " missing" }{ prev = $2 }' file

答案4

使用 for 循环。

 for i in file_{0000..0999}.jpeg; do if !  test -e "$i" ; then echo "$i doesn't exist"; fi; done

作为脚本

#! /bin/bash
for i in file_{0000..0999}.jpeg
do 
if !  test -e "$i"
then
echo "$i doesn't exist"
fi
done

相关内容