2009-10-20 24 views
2

每當glob模式匹配失敗時,它會停止整個作業。例如,適用於終端的globbing優雅降級

$ mv *.jpg *.png folder1 && blahblah 
mv: cannot stat `*.jpg': No such file or directory 

* .png未移動到folder1,並且blahblah未運行。

下面的腳本僅適用於當[A-Z] *和*成功時的情況。

#!/bin/bash 
cd $1 
du -sk .[A-z]* *| sort -rn | head 

我該如何使globbing失敗,最多隻顯示警告,但從不停止工作?

回答

5

在Bash中,shopt -s nullglob將允許失敗的glob擴展爲無任何錯誤。

+1

nullglob解決了大部分問題,但不是全部;如果沒有任何一個匹配,你會得到類似'mv folder1 && blahblah'(你從mv獲得一個用法消息,而blahblah不會運行)。完全解決這個問題比較複雜,部分原因是你必須定義在沒有文件可操作時會發生什麼。你最終做了像'file_list =(*。jpg * .png); if [[$ {#file_list [@]} -gt 0]];然後mv「$ {file_list [@]}」folder1 && ...' – 2009-10-20 19:34:58

0

然後使用循環。 KISS

for files in jpg png 
do 
    mv *.${files} /destination 2>/dev/null && do_something 
done 
+1

不僅這樣慢,而且還會發出'mv:can not stat'* jpg':沒有這樣的文件或目錄。 – ephemient 2009-10-21 00:41:42

+0

請在評論之前再仔細看看整件事情。我很高興知道它的緩慢。但它完成了工作。例如,單個命令「mv * jpg * png文件夾&&觸摸虛擬」將不會按照OP的情況起作用。但是如果你引入一個for循環,就會創建一個虛擬文件,因爲現在我們正在逐一處理每個文件類型。 – ghostdog74 2009-10-21 01:42:44

+0

至於錯誤「不能統計」,它將stderr重定向到/ dev/null ... – ghostdog74 2009-10-21 01:43:41

相關問題