2014-01-14 46 views

回答

12

可以ls -d文件,看看哪些得到一些輸出。既然你有一個字符串,只需管道清單,並使用xargs能夠ls他們。

要隱藏錯誤,請將它們重定向到/dev/null。總之,xargs ls -d 2>/dev/null使它:

$ echo 'a.txt 
b.txt 
other' | xargs ls -d 2>/dev/null 
a.txt 
b.txt 

正如你看到的,xargs ls -d執行ls -d給定的所有參數。 2>/dev/null擺脫stderr消息。

+2

...與通常解析'ls'輸出的警告;例如,如果其中一個參數是一個目錄,您將獲得該目錄的內容,而不是其名稱。 – tripleee

+2

好的,也許'ls -d'會是最好的。 – fedorqui

0

我想出了使用stats的退出代碼在一段時間讀循環第一件事:

<input> | while IFS= read -r f; do stat "$f" &>/dev/null && echo "$f"; done 

請注意,此解決方案是,因爲它在shell代碼迴路,並調用一個 外部工具(在每個迭代中創建一個子進程,stat)。

+1

你的願望是我的命令。 – mklement0

1

如果你有GNUxargs,使用-d '\n'確保文件名帶空格的正確處理。

$ echo 'a.txt 
does/not.exist 
b.txt' | xargs -d '\n' find 2>/dev/null 

隨着BSD/MacOS的xargs,這是一個有點複雜:

echo 'a.txt 
does/not.exist 
b.txt' | tr '\n' '\0' | xargs -0 find 2>/dev/null 
0

我會使用bash的,如果要檢查的文件。它結束時不那麼緊湊,但我認爲閱讀更清晰,並且更容易對結果中找到的每個文件執行一些操作。

它與具有空格的文件名兼容。

echo 'a.txt 
does/not.exist 
b.txt' | while read filename 
do 
    if [[ -f "$filename" ]] 
    then 
    echo $filename # Or do something else with the files here 
    fi 
done