パターン内の欠落しているファイル名を一覧表示する

パターン内の欠落しているファイル名を一覧表示する
  1. 数字で始まり、その後にハイフンで区切られて説明が続くファイルがたくさんあります。例:

    001 - awesomesauce
    216 - stillawesomesauce
    
  2. サブディレクトリごとに整理されています

では、bashスクリプトや組み込みのスクリプトを使用して、これらのディレクトリ内を調べ、順番に番号が足りないかどうかを確認するにはどうすればよいでしょうか。つまり、上記の例では、、などが足りないと報告します。それが可能で、ファイルがリストされ002、見つからない場合はエラーがスローされることはわかっていますが、足りないファイルだけを取得して再帰的に実行するより良い方法はありますか。128ls {000..216}\ -*

答え1

セットアップではgnu以下を実行できます:

myarr=( $(find . -type f -name '[0-9][0-9][0-9]*' -printf '%f\n' | cut -c1-3 | sort -n) )
join -v1 <(seq -w ${myarr[-1]}) <(printf '%s\n' ${myarr[@]})

あるいは、 ではzsh次のような方法を試すこともできます。

myarr=( **/[0-9][0-9][0-9]*(.one_'REPLY=${${REPLY:t}:0:3}'_) )
mynums=( {001..$myarr[-1]} )
print -l ${mynums:|myarr}

各ファイル名から数字(最初の3桁)を抽出し、並べ替えて結果を配列に保存します。次に、最後のインデックスの値(つまり、ファイル名から抽出された最大の数字)までの数字を含むmyarr別の配列を設定します。mynums001パラメータ拡張myarrの展開から内の値を削除しますmynums

答え2

私が書いたfindmissingPythonスクリプトこれを実行するものです。私は macOS で開発しましたが、どのプラットフォームでも動作するはずです。Python 2.7 および 3.6 で実行してテストしました。

私のスクリプトが実際にどのように機能するかをここで紹介します。

$ cat sampleFile.txt | python findmissing.py -p "DSC003\.(\d+)"
12
13
14
16
17
18
22
23
24

...次のファイルを指定すると出力されます。

Id                                  Name         Type   Size     Created
1Dgt5ZFKT3zilwPZdiPyPmhM0Y3Fz_xo8   DSC003.010   bin    1.1 GB   2018-06-12 16:57:14
16QPadXBXPGIwiRhzMFRuY7tZkdIlJ1DI   DSC003.011   bin    1.1 GB   2018-06-12 16:54:57
1zD492J3F42Azeoct82DMlXRRuWA8AUiY   DSC003.015   bin    1.1 GB   2018-06-12 17:32:12
1bah8OM_F49BNeoct8M2DlXRRuOD8AUiY   DSC003.019   bin    1.1 GB   2018-06-12 17:24:41
1eZfY4qn3Ol6w1BFafQn6YDy1uOU82NNA   DSC003.020   bin    1.1 GB   2018-06-12 17:21:46
1x-P84Jq1cyuJCW2Opvy4m_qOjOHvAKtA   DSC003.021   bin    1.1 GB   2018-06-12 17:27:16
1O4TjR8Cl31A5qxHkyVmhmukp4dofCO3t   DSC003.025   bin    1.1 GB   2018-06-12 17:36:00

関連情報