2011-12-14 139 views
11

我想編寫一個shell腳本,它將遍歷文件夾中的所有文件並回顯「放入$ {filename}」。任何人都可以將我指向正確的方向嗎?Shellscript循環遍歷文件夾中的所有文件

+2

你有什麼試過? 「for」語句和「*」運算符的哪一部分會讓你困惑?你能更具體地瞭解你所知道的以及你不瞭解shell的內容嗎? – 2011-12-14 22:15:26

+0

剛剛遇到這個 - 任何人使用此作爲參考警告 - 答案不處理空格正確的文件名...參考https://stackoverflow.com/questions/7039130/iterate-over-list- of-files-with-spaces獲得更好的解決方案! – blackghost 2017-06-02 15:59:42

回答

15
for filename in *; do echo "put ${filename}"; done 
+1

如果當前目錄恰好爲空,則輸出「put *」而不是正確輸出任何內容。它可以修復嗎? – JWWalker 2013-04-27 01:47:19

3

遞歸地包括子目錄中的文件?

find dir -type f -exec echo "put {}" \; 

該目錄中只有文件?

find dir -maxdepth 1 -type f -exec echo "put {}" \; 
+0

當我嘗試這個時,我得到錯誤`find'dir':沒有這樣的文件或目錄`。 – gbmhunter 2013-12-19 22:44:44

5
for file in *; do 
    echo "put $file" 
done 

或者,如果你想包含子目錄:

find . -type f -exec echo put {} \; 

如果你想包括文件夾本身,取出-type f部分。

1

一個比較另類的使用lssed

$ ls -1 <dir> | sed -e 's/^/put /' 

,並使用lsxargs

$ ls -1 <dir> | xargs -n1 -i%f echo 'put %f' 
0

這也將工作遞歸,如果您有任何子目錄和文件裏面他們:

find . -type f|awk -F"/" '{print "put ",$NF}' 
2

如果y你沒有任何文件,那麼,而不是打印*我們可以做到這一點。

format=*.txt 
for i in $format; 
do 
if [[ "$i" == "$format" ]] 
then 
    echo "No Files" 
else 
    echo "file name $i" 
fi 
done