
我想列出 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"