数字で始まり、その後にハイフンで区切られて説明が続くファイルがたくさんあります。例:
001 - awesomesauce 216 - stillawesomesauce
サブディレクトリごとに整理されています
では、bash
スクリプトや組み込みのスクリプトを使用して、これらのディレクトリ内を調べ、順番に番号が足りないかどうかを確認するにはどうすればよいでしょうか。つまり、上記の例では、、などが足りないと報告します。それが可能で、ファイルがリストされ002
、見つからない場合はエラーがスローされることはわかっていますが、足りないファイルだけを取得して再帰的に実行するより良い方法はありますか。128
ls {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
別の配列を設定します。mynums
001
パラメータ拡張myarr
の展開から内の値を削除しますmynums
。
答え2
私が書いたfindmissing
Pythonスクリプトこれを実行するものです。私は 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