![連続した数値名を持つファイルに欠けている内容があるかどうかを確認できますか? [コピー]](https://linux33.com/image/196942/%E9%80%A3%E7%B6%9A%E3%81%97%E3%81%9F%E6%95%B0%E5%80%A4%E5%90%8D%E3%82%92%E6%8C%81%E3%81%A4%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E6%AC%A0%E3%81%91%E3%81%A6%E3%81%84%E3%82%8B%E5%86%85%E5%AE%B9%E3%81%8C%E3%81%82%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
私が与えれば、私は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
出力をその参照と比較できます。jot
ls -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