2016-11-17 34 views
1

我是新的(ish)使用Bash,我試圖弄清楚如何將幾個不同的東西合併到一個腳本中。Bash:列出具有文件類型的目錄,但缺​​少其他類型的文件

我正在尋找被中斷的文件傳輸。這些文件夾包含圖像文件(jpgs或pngs),但缺少另一個特定文件(finished.txt)。

這裏是我用來找到圖像文件夾(從here)什麼:

for f in */incoming/ ; do 
    log_f="${f//\//}" 
    echo "searching $f" 
    find "$f" -iname "*jpg*" -o -iname "*png*" > "/output/${log_f}.txt" 
    echo "$f finished" 
done 

然後,我在運行此命令查找缺少finished.txt文件(從here文件夾):

find -mindepth 2 -maxdepth 2 -type d '!' -exec test -e "{}/finished.txt" ';' -print 

有沒有辦法把它們結合在一起,所以我已經具有JPG或PNG文件的文件夾列表,但已經finished.txt?另外,如果我想添加-mtime,我該在哪裏放?

另外,如果有更好/更快的方法來做到這一點,我也對此感興趣。

謝謝!

回答

0

從第一次通過jpg/png獲取文件時,您可以使用dirname獲取目錄。目錄列表可用於迭代並查找finished.txt文件。如果找不到,可以跳過該目錄。

東西,如下應該做要緊

for i in `find "$f" -iname "*jpg*" -o -iname "*png*" -exec dirname {} \;` 
do 
    ls $i | grep finished >/dev/null 
    if [ $? -eq 1 ]; then 
     echo $i 
    fi 
done 

添加「|排序| uniq的」在find命令的或許最終刪除重複。喜歡的東西

發現 「$ F」 -iname 「JPG」 -o -iname 「PNG」 -exec目錄名{} \; |排序| uniq

+0

謝謝你。出於某種原因,我得到這個: '發現:'':沒有這樣的文件或目錄' – Amy

+0

我希望你設置f參數在上面的命令「$ f」。所以就像f =/Users/guest/mydirectory,然後運行上面的命令。 –