2012-11-08 147 views
1

我需要創建一個shell腳本,它將簡單地找到特定源文件(例如/ var/www/html/folder1/source /)下的文件(例如* .jpg),並且必須執行一些操作Find命令返回的輸出。下面是命令我已經寫在我的劇本linux查找命令輸出遍歷

outputvar = find /var/www/html/folder1/source/ -name \*.jpg 

我如何能夠讓存儲find命令的輸出變量的遍歷操作?

+2

你想對每個這樣的文件做什麼操作? –

+0

我需要壓縮每個文件夾的所有文件,之後將不得不刪除這些文件 – neeraj

+0

你可以有文件名包含像字符的空間嗎?或者你確定沒有'* .jpg'文件名有空格,例如沒有'photo \ of \ flower.jpg'? –

回答

4

您可能希望將find命令的輸出置於文件中,例如,

find /var/www/html/folder1/source/ -name \*.jpg > /tmp/find.out 

您還可以將該輸出放入shell變量中,例如,

outfindvar=$(find /var/www/html/folder1/source/ -name \*.jpg) 

,然後你可以遍歷他們

for jpgfile in $outfindvar; do 
    ## do something with $jpgfile 
done 

如果你可以在自己的名稱空間中的文件,要小心。在這種情況下,請考慮使用動作find;或者可以使用-exec操作的輔助腳本。

你真的應該閱讀Advanced Bash Scripting Guide

您可能希望與

#!/bin/bash -vx 

啓動腳本同時調試它,並刪除-vx一旦你的腳本運作良好。

+0

感謝您的回答,但我的問題是我如何遍歷在上例中使用的「outfindvar」? – neeraj

+0

我跑上面的代碼,但得到錯誤「/ var/www/html/folder1/source:是一個目錄」。請建議 – neeraj

+0

您是否開始閱讀*高級Bash腳本指南*或其他一些好的材料?它比我們所能解釋的要好得多。我感覺你不懂一些關於shell和Linux命令的基礎知識。另請閱讀「find(1)」的文檔,例如與'人發現' –

2

piping如何輸出到任何你想要做的事情呢?

find /var/www/html/folder1/source/ -name \*.jpg | other_command 
+0

管道似乎有用,但我不明白,在我的情況下,我將如何遍歷與「outputvar」我的例子。你能否提供更多的細節 – neeraj

+0

輸出是一系列字符串(文件路徑),如果'other_command'(可以是一個任意複雜的鏈)可以讀取'stdin',它將對每個字符串進行操作,我認爲它是「遍歷」是什麼意思。 – ezod