簡體   English   中英

如何在if語句中使用bash的find參數?

[英]How to use bash's find arguments in if statements?

正如標題所說。 我知道如何與之配合使用find的參數,但不知道如何在評估find返回變量時像聲明一樣使用它們。 例如:

find . -type f

顯然,這找到了所有文件,而我想使用它的方式是:

ARRAY=$(find .)
for item in $ARRAY
do
if [[ -f $item ]] ; then

這樣做也是一樣,它只處理查找中的文件。 我顯然知道如何使用-type參數,而其他方法則不知道。 例如:

find . -size +512k

如果我想要大小,請執行if [[ -size +512k $item ]]似乎沒有按預期工作。 如何使用?

其他我不知道如何使用:

find . -executable
find . \( -name "*.html" -or -name "*.css" \)
find . -mtime +364

如果我遍歷查找結果,該如何在if語句中使用它們?

另外,在事實之后而不是在查找過程中,我將如何獲取查找結果的總大小。 假設我有我的ARRAY=$(find .)以及對$ARRAY變量執行du -ch 我該怎么做?

抱歉,我是bash菜鳥,它的語法對我來說很難。

find命令(這是一個獨立程序,實際上不是Bash的一部分)與[[ ... ]]語法(內置在Bash中)之間確實沒有任何關系。 因此, find命令所支持的選項不必具有[[ ... ]]語法所支持的選項也就不足為奇了。

有關[[ ... ]]語法支持的內容的完整列表,請參見《 Bash參考手冊 》的第3.2.4.2節“條件構造”和第6.4節“ Bash條件表達式”

要測試"$foo"是否是可執行文件:

if [[ -x "$foo" ]] ; then

要測試某些內容是否以.html.css結尾:

if [[ "$foo" == *.html ]] || [[ "$foo" == *.css ]] ; then

其他的則不是那么容易,它們將需要求助於stat外部程序。

這可以解決問題

find . -size +10k -exec bash -c 'f="$1"; if [ $(du -k "$f" | cut -f 1) -gt 100000 ]; then echo "$f" ;fi' _ {} ';'

借助以下答案: 使用多個命令查找-exec

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM