簡體   English   中英

Shell腳本:檢查文件是文件而不是目錄

[英]Shell script: Check that file is file and not directory

我目前正在研究一個小的可愛Shell腳本,以循環訪問特定文件夾,並且僅輸出其中的文件,不包括任何最終目錄。 不幸的是,我無法使用find因為我需要訪問文件名變量。

這是我當前的代碼段,該代碼不起作用:

for filename in "/var/myfolder/*"
do
  if [ -f "$filename" ]; then
    echo $filename # Is file!
  fi

done;

我究竟做錯了什么?

您不得轉義/ var / myfolder / *,這意味着,必須刪除雙引號,以便外殼程序將表達式正確地擴展為所需的文件名列表。

您做錯的是不使用find 可以使用{}來檢索文件名。

find /var/myfolder -maxdepth 1 -type f -exec echo {} \;

嘗試在/ var / myfolder / *周圍不加雙引號(原因是通過加雙引號使所有文件成為單個字符串,而不是使每個文件名成為單獨的字符串

for filename in "/var/myfolder/*"

用引號引起來的是從該glob中獲得一個巨大的字符串-在if之前緊接一個echo _ $filename _以發現它僅通過一次“循環”,而沒有用。

刪除引號,然后重試:)

您可以使用查找來避免所有這些麻煩。

for i in $(find /var/myfolder -type f)
do
echo $(basename $i)
done

這不是您要根據自己的情況采取的措施嗎? 如果要限制深度,請使用-maxdepth選項進行查找。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM