Shell-Script

遍歷目錄中的所有內容?

  • September 7, 2016

好的,在此立即作為副本關閉之前,讓我解釋一下。我嘗試了很多方法,例如:

for d in /Applications ; do
  echo "$d"
done

但這又回來了

/應用

而不是 /Applications 的內容。

我也試過:

#!/bin/bash
FILES=/Applications

for file in $FILES
do
  echo $file
done

這基本上是一樣的。不過,我注意到,當我這樣做時:

#!/bin/bash

for file in *
do
   echo $file
done

它正確地回顯了我的主文件夾中的所有文件夾。有誰知道發生了什麼?

*被稱為 shell globbing(路徑名擴展)運算符(?[]稱為),當您不加引號呼叫它時,它將擴展到目前目錄中的所有文件(沒有任何目錄前綴)。如果您使用前綴例如/foo/*,它將擴展到目錄中的所有文件/foo

請注意,它也用於匹配某些文件,例如僅匹配以目前目錄開頭foo和結尾的文件,請使用 glob 模式:bar

foo*bar

因此,for循環現在可以採用以下形式:

for f in foo*bar; do echo "$f"; done

閱讀man您的 shell 頁面以了解有關 shell globbing 的更多資訊。

要遍歷目錄中的文件(和子目錄),您可以使用

for file in /Applications/*
do
   echo "$file"
done

請注意,如果未找到匹配項,則該file變數將按/Applications/*字面意思包含字元串(帶有星號),如果以下命令需要現有路徑,這可能會導致錯誤。如果在沒有文件匹配的情況下您不想做任何事情,您可以使用以下nullglob選項:

shopt -s nullglob
for file in /Applications/*
do
   echo "$file"
done

引用自:https://unix.stackexchange.com/questions/308297