[英]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.