簡體   English   中英

Bash腳本打印文件列表

[英]Bash scripting print list of files

這是我第一次使用BASH腳本,一直在尋找一些教程,但無法弄清楚一些代碼。 我只想列出文件夾中的所有文件,但我做不到。 到目前為止,這是我的代碼。

#!/bin/bash
# My first script
echo "Printing files..."
FILES="/Bash/sample/*"

for f in $FILES
do
    echo "this is $f"
done

這是我的輸出

正在打印文件...這是/ Bash / sample / *

我的代碼有什么問題?

您誤解了bash中“ in”一詞的含義。 for f in $FILES語句僅對$FILES字符串中的(用空格分隔)單詞進行迭代,其值是“ / Bash / sample”(一個單詞)。 您似乎希望文件位於命名目錄中,這是bash語法不假定的空間隱喻,因此您必須明確地告訴它列出文件。

for f in `ls $FILES`         # illustrates the problem - but don't actually do this (see below)
...

可能會做到。 這會將ls命令的輸出轉換為字符串“ in”,每個文件中只有一個單詞。

注意:此示例是為了幫助理解“ in”的含義,但不是一個好的通用解決方案。 一旦其中一個文件名稱中有空格,它將遇到麻煩-這些文件將為列表貢獻兩個或多個單詞,每個單詞單獨使用可能不是有效的文件名。 這突顯了(a)您應該始終采取額外的步驟來解決bash和類似shell中的空格問題,並且(b)您應該避免在自己的文件名和目錄名中使用空格,因為否則會遇到很多其他問題尚未努力遵守(a)的有用的第三方腳本和實用程序。 不幸的是,適當的遵從性經常會導致bash中語法的混淆。

我認為路徑“ /Bash/sample/* ”中存在問題。

您需要將此位置更改為絕對位置,例如:

/home/username/Bash/sample/*

或使用相對路徑,例如:

~/Bash/sample/*

在大多數系統上,這完全等效於:

/home/username/Bash/sample/*

其中username是您的當前用戶名,請使用whoami查看您的當前用戶名。

學習Bash的最佳場所: http : //www.tldp.org/LDP/abs/html/index.html

這應該工作:

echo "Printing files..."
FILES=(/Bash/sample/*) # create an array.
                       # Works with filenames containing spaces.
                       # String variable does not work for that case.

for f in "${FILES[@]}" # iterate over the array.
do
    echo "this is $f"
done

&您不應該解析ls輸出

列出您的文件)

如果要列出文件列表並查看它們:

    ls                           ###Takes list###
    ls -sh                       ###Takes list + File size###
    ...

如果要將文件列表發送到文件以讀取並稍后檢查它們:

    ls > FileName.Format         ###Takes list and sends them to a file###
    ls > FileName.Format         ###Takes list with file size and sends them to a file###

暫無
暫無

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

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