在 FreeBSD 中從 `ls -R` 指令中排除目錄

在 FreeBSD 中從 `ls -R` 指令中排除目錄

我想列出 FreeBSD 9.2 中某個目錄中的所有文件,但不想包含特定目錄。我檢查了-I--ignore參數ls,但I僅忽略超級用戶模式並且--ignore不受支援。

有誰知道如何使用ls或使用另一個命令(如grep)來做到這一點?

答案1

如果您想列出除某個目錄中的文件之外的所有文件,notHere您可以使用以下find命令來執行此操作

find . -path ./notHere -prune -o -type f -print

解釋:

  • .: 啟動find目錄
  • -path ./notHere:啟動一條與路徑相符的規則./notHere
  • -prune:防止find下降到目前符合的目錄
  • -o:新增一個or來指定如果第一條規則不符合我們想要發生什麼
  • -type f:僅匹配文件,而不是目錄(如果您還想查看目錄條目,請將其刪除)
  • -print:通常不需要,因為它是預設操作,但某些版本find仍然希望您明確表示您希望列印出結果

您提到想要其他輸出(特別是ls -ll)而不僅僅是文件名列表。 find通常有一個內建的工具可以幫助解決這個問題,儘管沒有那些特定的選項ls。您可以將-print上面的標誌替換為-ls,看看這組ls選項是否足夠接近您:

find . -path ./notHere -prune -o -type f -ls

或者,如果這還不夠好,您可以find執行所需的命令,而不是嘗試單獨處理輸出,例如:

find . -path ./notHere -prune -o -type f -exec ls -ll {} +

答案2

我使用此腳本過濾掉名稱以“_”開頭的所有資料夾。它可能不適用於帶有空格的資料夾,但您可以修改它。

#!/bin/sh

A=`ls /j/ | xargs | sed 's/_[a-z0-9]*//g' | awk '{$1=$1;print}'`
W=`echo $A | wc -w | tr -d '[[:space:]]'`
echo $W

一般來說,有趣的部分是:

ls some_folder | xargs | sed 's/_[a-z0-9]*//g'

正規_[a-z0-9]*表示式包含與應排除的名稱相符的模式。

這是如果您想要列出沒有-a選項的資料夾(僅名稱)。如果你想用-a那麼最簡單的是:

ls -la | grep -v skip_folder

其中skip_folder是您要排除的名稱。如果資料夾包含空格,請使用引號,例如:

ls -la | grep -v "skip folder"

相關內容