爲什麼不能正常工作?如何獲取目錄中的所有文件?
find . -maxdepth 1 -type f -print0 | xargs -0 .
我得到的全部是xargs: .: Permission denied
。
爲什麼不能正常工作?如何獲取目錄中的所有文件?
find . -maxdepth 1 -type f -print0 | xargs -0 .
我得到的全部是xargs: .: Permission denied
。
當您運行. file
時,您會調用shell內建的.
。您的xargs
變體嘗試執行當前目錄。
即使這確實會調用內置命令,該命令也會在子外殼中運行,所以所有的「外包」都是無用的。
使用貝通配,併爲一個循環:
for file in * ; do
if [ -f "$file" ] ; then
. "$file"
fi
done
@墊的解決方案是最乾淨的,但如果你有興趣在一些慶典復爲它的樂趣,下面的解決方案,在原有基礎上find
命令,工作,太:
eval $(find . -maxdepth 1 -type f -exec echo . \'{}\'';' \;)
find
與-exec
用於構建一個蘇找到每個文件的rcing命令,例如. './foo';
。請注意轉義的單引號以確保具有特殊字符的文件名。處理得當。find
將返回一個換行符分隔的採購命令列表;通過使用命令替換($()
)而不使用雙引號,shell將這些行摺疊爲一行,每行使用一個空格作爲分隔符。eval
在當前shell的上下文中執行完整的源代碼命令列表(在OS X 10.8.1上驗證)。注意:此解決方案的一個潛在問題是命令字符串可能會變大 - 可能太大 - 存在許多文件和/或長文件名。
感謝您的解釋! –
清潔解決方案;很高興知道你不能使用'xargs'構建內建函數(對於這個問題''find'''-exec' primary)。這裏是等價的單行:'f in *;做[[-f「$ f」]] &&。 「$ F」;做完了' – mklement0