web-dev-qa-db-ja.com

隠しファイルをstatコマンドに含める方法は?

私のコードでは、基本的にすべてのファイルを再帰的にループし、stat -c%s $iを使用してサイズを取得しています。 99%のファイルでうまく機能しますが、エラーが発生することがあります。

stat: cannot stat '/media/root/persistence/.Trash-0/info/subory': No such file or directory

/media/root/persistence/ディレクトリに移動してlsと入力すると、./Trash-0フォルダが表示されないため、フォルダ自体とその内容が非表示になっていると思います。このようなエラーメッセージを取り除き、内部のファイルのサイズを取得するにはどうすればよいですか?

3
asso

これを試して、すべてのファイルを表示します".*"隠しファイルを表示します。"*"隠しファイルを表示しない

stat -c%s .* *
3
Hatem Badawi

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

または、これらの手法を組み合わせて使用​​します。

1