Bash

bash 計數文件和目錄、摘要大小和 EXCLUDE 是 fuse|sshfs 的文件夾

  • April 13, 2022

我需要一個 bash 腳本的幫助,該腳本計算 Linux 系統 (Debian) 上指定目錄中的文件和文件夾,但我想排除指定的文件夾。

我有一個workdir用不同的腳本文件和文件夾命名的主目錄。在裡面workdir,我有一個名為mysshfs. 我使用 fuse/sshfs 在文件夾中掛載一個外部文件mysshfs夾。

現在我開始一些命令來獲取有關文件/目錄計數和文件/目錄大小的資訊,但我想排除目錄mysshfs

我的 bash 命令有效:

  1. 獲得完整尺寸workdir| 沒有使用保險絲/sshfs
$ du -hs workdir
  1. 得到 的全尺寸workdir,不包括mysshfs| 使用中的保險絲/sshfs
$ du -hs --exclude=mysshf workdir
  1. 計算文件workdir| 沒有使用保險絲/sshfs
$ find workdir -type f | wc -l
  1. 計算文件夾workdir| 沒有使用保險絲/sshfs
$ find workdir -type d | wc -l
  1. 中的文件計數workdir,不包括mysshfs| 沒有使用保險絲/sshfs
$ find workdir -type f -not -path "*mysshfs*" | wc -l
  1. 中的文件夾計數workdir,不包括mysshfs| 沒有使用保險絲/sshfs
$ find workdir -type d -not -path "*mysshfs*" | wc -l

當我使用命令5 和 6並且遠端目錄安裝在該mysshfs目錄下時,命令會掛起。

這些命令最終可以工作並顯示正確的輸出,但看起來這些命令仍在排除目錄中查找,即使它們不應該在,因此顯示結果需要很長時間。

我的錯誤在哪裡,或者我在命令 5 和 6 中忘記了什麼?或者我可以為我的結果使用其他命令嗎?

我需要使用 2 個單獨的命令來計算文件和目錄,並排除安裝在 fuse/sshfs 上的指定文件夾以獲得快速結果。

您可以使用-prune來避免進入子目錄。請嘗試以下命令:

find workdir -path "*/mysshfs/*" -prune -o \( -type f -print \) | wc -l
find workdir -path "*/mysshfs/*" -prune \( -type d -print \)  | wc -l

引用自:https://unix.stackexchange.com/questions/691703