bashはファイルとディレクトリの数を計算し、サイズを要約し、ヒューズ| sshfsフォルダを除外します。

bashはファイルとディレクトリの数を計算し、サイズを要約し、ヒューズ| sshfsフォルダを除外します。

Linuxシステム(Debian)で指定されたディレクトリ内のファイルとフォルダの数を計算するには、bashスクリプトの助けが必要ですが、指定されたフォルダを除外したいと思います。

workdir他のスクリプトファイルとフォルダの名前を付けたホームディレクトリがあります。内部にはworkdirというディレクトリがありますmysshfs。私はヒューズ/ sshfsを使ってフォルダ内に外部フォルダをマウントしますmysshfs

これで、ファイル/ディレクトリの数とファイル/ディレクトリのサイズに関する情報を取得するためにいくつかのコマンドを実行しますが、directoyを除外したいと思いますmysshfs

私のbashコマンドが動作します。

  1. workdirフルサイズを見る|ヒューズ/sshfsが使用されない

    $ du -hs workdir
    
  2. |をworkdir除いて、全体のサイズを取得します。mysshfsヒューズ/sshfs使用中

    $ du -hs --exclude=mysshf workdir
    
  3. workdir|のファイル数を数えます。ヒューズ/sshfsが使用されない

    $ find workdir -type f | wc -l
    
  4. workdir|のフォルダー数を計算します。ヒューズ/sshfsが使用されない

    $ find workdir -type d | wc -l
    
  5. workdirmysshfs除いて、計算中のファイル数ヒューズ/sshfsが使用されない

    $ find workdir -type f -not -path "*mysshfs*" | wc -l
    
  6. 計算のフォルダ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.sshfsFSタイプのファイルをスキップするには、次のようにします。

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

関連情報