連続した数値名を持つファイルに欠けている内容があるかどうかを確認できますか? [コピー]

連続した数値名を持つファイルに欠けている内容があるかどうかを確認できますか? [コピー]

私が与えれば、私は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

bashシェルを使用している場合は、「完璧な」出力参照の例を使用または生成し、seq出力をその参照と比較できます。jotls -1

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

欠落しているファイルが表示されるだけでなく、関連のないファイルも検索します。

答え2

他の答えは見つける方法を正確に提供しますが、どのファイルがありません。元の問題は一部より入力しやすい方法でファイルが欠落しているかどうかを確認できます。

あなたのリストはwcの出力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

関連情報