復元されたデータを調べるために、フォルダーとファイルを再帰的に調べ、最終的にファイルを実行して、特定のバックアップから完全に復元されたかどうかを確認するスクリプトに取り組んでいます。(復元されたファイルは再生され、mp3 またはその他のオーディオとして識別され、動作しないファイルは ASCII テキストとして識別されます)
今のところ、テストフォルダー構造を調べて、すべてのフォルダーと対応するファイルを印刷するだけで満足できます。(主にテスト用に印刷しますが、スクリプトが現在どこにあり、最後にどれだけ進んだかをログに記録して、何が処理されたかを確認したいためでもあります)
2 つの for ループを使用してみました。1 つはフォルダー用、もう 1 つはファイル用です。(理想的には、1つのフォルダーを取り、そこにあるファイルをリストし(またはサブフォルダーを掘り下げる可能性があります)、各フォルダーの下にそのサブフォルダー内のファイルのみを表示してから、次のように移動します。
Folder1
- File 1
- File 2
-- Subfolder
-- File3
-- File4
Folder2
- File5
ただし、これは通常提案されている方法 (for ループなど) では機能しないようです。ディレクトリに「find . -type d」を使用し、「find . -type f」または「find * -type f」を使用するところまで行きました(サブディレクトリに入らないようにするため)ただし、希望どおりに実行されたかどうかを確認するためにパス/ファイルを変更したところ、それが機能しないことが明らかになりました。
最初にすべてのディレクトリを出力し (最初のループ)、次にすべてのファイルを出力するように常に見えました (2 番目のループ)。それが何をしているかを追跡し、何がチェック/回復されたかをより簡単に知るために、上記で説明したように、より整然とした方法でこれを行いたいと思います。それで、私は何か間違ったことをしたのでしょうか、それとも bash の for ループの一般的な制限でしょうか?
関連する可能性のある別の問題: find の出力を配列に割り当てることは機能しているように見えましたが、配列としてアクセスできませんでした ...
ループの例:
for folder in '$(find . -type d)' ; do
echo $folder
let foldercounter++
完了Arrays: Folders=("$(find . -type d)")
#私の知る限り、これは出力を配列として割り当てる必要があります#しかし、実際には echo "$
folders[1]" のように適切に割り当てられません #機能しません (スペースには引用符が必要です)