2015-10-21 44 views
0

如何獲取滿足以下條件的當前目錄中的文件列表?Bash命令獲取目錄中的文件列表

  • 隱藏文件(從「」)不應該包括
  • 文件夾名稱不應該包括
  • 的文件名應包括其擴展
  • 文件名用空格不應該被劃分爲多個列表中的項目

(我打算遍歷在bash腳本一個福爾循環的結果。)

回答

0

如何只使用*,然後跳過該目錄爲在循環的第一步?

for F in * ; do 
    if test -d "$F" ; then continue ; fi 
    echo "$F" 
done 
+0

在完成之前,您需要一個語句終結符(分號或換行符)。 – tripleee

+0

@tripleee那裏有一個換行符。 – twm

+0

未格式化的帖子;但現在有了。 – tripleee

0
只有在當前目錄>搜索

! -name '.*' - -

應罰款爲您的需求

maxdepth 1 '*'>搜索文件不匹配名稱模式

type f - >只搜索文件,不迪爾斯

0

你可以試試這個:

find $folderPath -type f -printf "%f\n" | grep -v '^[.].*' 

您只需更改$ folderPath。

說明

找到$ FOLDERPATH型的F -printf 「%F \ N」

使用find命令,您可以用幾個選項搜索到該文件夾​​。

  • '型的F' 只搜索文件,如果你想通過文件夾過濾器,你只需要改變 'd'

  • 「-print「%F \ n個 'F' 「'格式化命令的輸出。 '%f'提取文件名,'\ n'添加一個返回。

  • '|'是一個管道。使用管道,您可以使用命令的輸出將其用作其他命令中的輸入變量。

的grep -v '^ [。]。*'

  • grep的是尋找一個正則表達式expresion到輸入文本的命令。
  • 選項'-v'^ [。]。*',您排除包含正則表達式的值。在這種情況下,以a開頭的單詞。 (點)。

要關閉說明,如果您使用另一個'|' (管道),你可以處理命令的每個結果,就像另一個輸入的輸入一樣。這具有更好的性能,因爲輸出在Stream中,並且需要更少的內存來處理結果。

+0

你會在bash腳本的for循環中使用什麼?在那裏使用find還是有一種更好的方法是合理的? – ndrizza

2

只使用bash下

files=() 
for f in *; do [[ -d $f ]] || files+=("$f"); done 
printf "%s\n" "${files[@]}" 
+0

對100K代表表示高度的祝賀! – fedorqui

相關問題