
私のコードでは、基本的にすべてのファイルを再帰的に繰り返しますstat -c%s $i
。
stat: cannot stat '/media/root/persistence/.Trash-0/info/subory': No such file or directory
/media/root/persistence/
ディレクトリに移動してを入力すると、フォルダは表示されないため、ls
フォルダ./Trash-0
自体とその内容が非表示になっているとします。これらのエラーメッセージを削除し、その中のファイルのサイズをどのように知ることができますか?
答え1
これを試してみてください。すべてのファイルを表示し".*"
て非表示のファイルを表示し、非表示の"*"
ファイルを表示します。
stat -c%s .* *
答え2
stat
隠しファイルの動作に問題はありません。デフォルトでは、Unixファミリーシステムのプログラムは通常、で始まるファイルとディレクトリを無視します.
が、これらのファイルを明示的に指定しても、そのプログラムがそのファイルを表示または操作するのを防ぐことはできません。
stat
このエラーは、存在しないファイルまたはディレクトリで操作が試みられたことを意味します。これは、コードが最初にファイルリストを生成してからそのリストを繰り返すと、コードが.../info/subory
ファイルリストに到達する前に削除、名前変更、または移動されるためです。
親ディレクトリの名前を考えると、これはコードの実行中に手動または一部の自動化されたプロセスを介してデスクトップのジャンクファイルを空にするのと同じくらい簡単です。
このような一時的な問題の場合、最も簡単な解決策はエラーを無視して次のループ反復にスキップすることです。
stat -c%s $i 2>/dev/null || continue
またはデフォルト値を割り当てます(有効なサイズ-1
なので問題を示すために使用されます)。0
size=$(stat -c%s $i || echo -1)
以下を実行する前に、ファイルまたはディレクトリが存在することを確認することもできますstat
。
test -e $i && stat -c%s $i
または、これらの技術を組み合わせて使用してください。