Linuxシステム(Debian)で指定されたディレクトリ内のファイルとフォルダの数を計算するには、bashスクリプトの助けが必要ですが、指定されたフォルダを除外したいと思います。
workdir
他のスクリプトファイルとフォルダの名前を付けたホームディレクトリがあります。内部にはworkdir
というディレクトリがありますmysshfs
。私はヒューズ/ sshfsを使ってフォルダ内に外部フォルダをマウントしますmysshfs
。
これで、ファイル/ディレクトリの数とファイル/ディレクトリのサイズに関する情報を取得するためにいくつかのコマンドを実行しますが、directoyを除外したいと思いますmysshfs
。
私のbashコマンドが動作します。
workdir
フルサイズを見る|ヒューズ/sshfsが使用されない$ du -hs workdir
|を
workdir
除いて、全体のサイズを取得します。mysshfs
ヒューズ/sshfs使用中$ du -hs --exclude=mysshf workdir
workdir
|のファイル数を数えます。ヒューズ/sshfsが使用されない$ find workdir -type f | wc -l
workdir
|のフォルダー数を計算します。ヒューズ/sshfsが使用されない$ find workdir -type d | wc -l
workdir
mysshfs
除いて、計算中のファイル数ヒューズ/sshfsが使用されない$ find workdir -type f -not -path "*mysshfs*" | wc -l
計算のフォルダ
workdir
(除外mysshfs
)|ヒューズ/sshfsが使用されない$ find workdir -type d -not -path "*mysshfs*" | wc -l
コマンドを使用する場合5&6そして、リモートディレクトリがmysshfs
そのディレクトリの下にマウントされ、コマンドが中断されます。
コマンドは最終的に動作して正しい出力を表示しますが、そうではないにもかかわらず、コマンドがまだ除外されたディレクトリを探しているように見えるため、結果を表示するのに時間がかかります。
私の間違いはどこにありますか?それとも、コマンド5と6で何かを忘れましたか?それとも、結果を得るために使用できる他のコマンドはありますか?
迅速な結果を得るには、2つの別々のコマンドを使用してファイルとディレクトリの数を計算し、fusion / sshfsを介してマウントされた指定されたフォルダを除外する必要があります。
答え1
を使用すると、サブディレクトリに移動することを回避できます-prune
。次のコマンドを試してください。
find workdir -path "*/mysshfs/*" -prune -o \( -type f -print \) | wc -l
find workdir -path "*/mysshfs/*" -prune \( -type d -print \) | wc -l
答え2
fuse.sshfs
FSタイプのファイルをスキップするには、次のようにします。
find workdir//. -fstype fuse.sshfs -prune -o -type f -print | grep -c //
または、-xdev
他のファイルシステム(すべての種類)に移動しないでください。
wc -l
改行文字はファイル形式のすべての文字と同じくらい有効であるため、いかなる場合でもそれを使用してファイル数を計算することはできません。ここでは、//
一度だけ発生することが保証される発生回数を計算します。ただし、GNUを使用すると、find
これを行うこともできます。
find workdir -fstype fuse.sshfs -prune -o -type f -printf . | wc -c
または、種類別のファイル数の分析を取得します(f
例:定期的な、d
ディレクトリ、l
シンボリックリンク、p
名前付きパイプなど):
find workdir -fstype fuse.sshfs -prune -o -type f -printf '%y\n' |
sort |
uniq -c